二叉树的建立和遍历

                   二叉树的建立和遍历

 

Description

 

建立以二叉链作为存储结构的二叉树,实现 1)先序遍历; 2)中序遍历; 3)后序遍历; 4)层序遍历; 5)编程计算二叉树的叶子结点个数。

 

Input

按照先序遍历序列输入二叉树中数据元素的值,没有的输入0表示。

 

Output

第一行输出先序遍历序列 第二行输出中序遍历序列 第三行输出后序遍历序列 第四行输出叶子结点的个数。

 

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;
}

 

 

 

posted on 2012-08-09 18:50  即为将军  阅读(292)  评论(0)    收藏  举报

导航