二叉树的建立和遍历
二叉树的建立和遍历
Description
建立以二叉链作为存储结构的二叉树,实现 1)先序遍历; 2)中序遍历; 3)后序遍历; 4)层序遍历; 5)编程计算二叉树的叶子结点个数。
Sample Input
A B C 0 0 0 D E 0 F 0 0 G 0 0
Sample Output
A B C D E F G C B A E F D G C B F E G D A 3
分析:
先认识先序、中序、后序的意思,即可
# include<iostream> using namespace std; struct Tree { char chr; Tree *l,*r; }; Tree *root; int sign,Count; void Init(struct Tree *&t)// { char a; if(t==NULL) { t=new Tree; cin>>a; t->chr=a; t->l=NULL; t->r=NULL; if(a=='0') { sign++; return; } else { if(sign>=2)Count++;//后面有两个0的节点,一定就是叶子 sign=0; } } Init(t->l);//初始化左子树 Init(t->r);//初始化右子树 } void FirstSequence(struct Tree *t)//先序 { if(t->chr=='0')return; cout<<t->chr<<" "; FirstSequence(t->l); FirstSequence(t->r); } void InSequence(struct Tree *t)//中序 { if(t->chr=='0')return; InSequence(t->l); cout<<t->chr<<" "; InSequence(t->r); } void AfterSequence(struct Tree *t)//后序 { if(t->chr=='0')return; AfterSequence(t->l); AfterSequence(t->r); cout<<t->chr<<" "; } int main() { Count=0; sign=0; Init(root); FirstSequence(root); cout<<endl; InSequence(root); cout<<endl; AfterSequence(root); cout<<endl; if(sign>=2)Count++;//如果最后输入两个0,不会被判断,在此完善 cout<<Count<<endl; return 0; }
浙公网安备 33010602011771号