数据结构实验:二叉树的层次构造、前中后序遍历、高度depth、叶子节点数leafs、交换左右子节点swap
5420数据结构实验--二叉树中序遍历(二叉链表存储)
void inorder(Bitnode *t) //中序 { if(t->left)inorder(t->left); cout<<" "<<t->val; if(t->right)inorder(t->right); }
5421数据结构实验--后序遍历二叉树(二叉链表存储)
void postorder(Bitnode *t) //后序 { if(t->left)postorder(t->left); if(t->right)postorder(t->right); cout<<" "<<t->val; }
5422数据结构实验--先序遍历二叉树(二叉链表存储)
void preorder(Bitnode *t) //先序 { cout<<" "<<t->val; if(t->left)preorder(t->left); if(t->right)preorder(t->right); }
5423数据结构实验—求二叉树高度(二叉链表存储)
int depth(Bitnode *t) //计算二叉树高度 { if(!t)return 0; if(t->val==0)return 0; int ls = depth(t->left); int rs = depth(t->right); return ls>rs?(ls+1):(rs+1); }
5424数据结构实验—求二叉树叶子结点数(二叉链表存储)
int leafs(Bitnode *t) //计算叶子数 { if(!t)return 0; if(!t->left && !t->right)return 1; return leafs(t->left)+leafs(t->right); }
5425数据结构实验—交换二叉树结点的左右孩子(二叉链表存储)
void leveltraversing(Bitnode *t) //层次遍历 ,队列实现 { if(!t)return; Bitnode *rt,*q[1001]; int tail = 1,head = 1; q[tail++] = t; while(head<tail) { rt = q[head]; cout<<" "<<rt->val; if(rt->left)q[tail++] = rt->left; if(rt->right)q[tail++] = rt->right; head++; } } struct Bitnode* child_swap(Bitnode *t) //交换左右子节点 { if(!t)return 0; if(t->left) t->left = child_swap(t->left); //寻找最深处左节点 if(t->right) t->right = child_swap(t->right);//寻找最深处右节点 Bitnode *rt; //交换 rt = t->left; t->left = t->right; t->right = rt; }
——————————————————————————————————————————
树的层次构造如下
#include<bits/stdc++.h> using namespace std; struct Bitnode { int val; struct Bitnode *left,*right; }; struct Bitnode a[520]; struct Bitnode* CreatBitree_level() { int k=0,i,j,n; while(scanf("%d",&n),n!=-1) a[k++].val=n; for(i=0,j=1;i<k;i++,j++) { if(i+j>=k||a[i+j].val==0) a[i].left=NULL; else a[i].left=&a[i+j]; if(i+j+1>=k||a[i+j+1].val==0) a[i].right=NULL; else a[i].right=&a[i+j+1]; } return &a[0]; }