链式二叉树的创建及遍历

来源:互联网 发布:手机淘宝怎么投诉盗图 编辑:程序博客网 时间:2024/06/04 23:06

这一题参考了http://blog.sina.com.cn/s/blog_6955a88501014nh5.html这里的代码

描述

链式二叉树的创建及遍历

树的遍历有先序遍历、中序遍历和后序遍历。先序遍历的操作定义是先访问根结点,然后访问左子树,最后访问右子树。中序遍历的操作定义是先访问左子树,然后访问根,最后访问右子树。后序遍历的操作定义是先访问左子树,然后访问右子树,最后访问根。对于采用链式存储结构的二叉树操作中,创建二叉树通常采用先序次序方式输入二叉树中的结点的值,空格表示空树。对于如下的二叉树,我们可以通过如下输入“AE-F--H--”得到( ‘-’表示空子树)。
试根据输入创建对应的链式二叉树,并输入其先序、中序和后序遍历结果。

输入

输入第一行为一个自然数n,表示用例个数
接下来为n行字符串,每行用先序方式输入的要求创建的二叉树结点,’-’表示前一结点的子树为空子树。

输出

对每个测试用例,分别用三行依次输出其先序、中序和后序遍历结果。

样例输入

1
abdh---e-i--cf-j--gk---

样例输出

abdheicfjgk
hdbeiafjckg
hdiebjfkgca
#include <iostream>using namespace std;char a;typedef char Elemtype;typedef struct Bitree{Elemtype data;struct Bitree*lchild, *rchild;}Bitree;Bitree *GreatBitree(Bitree *t)//这个地方看不懂啊,为什么要在前面在*{//此函数为根据输入创建二叉树,注意输入应按先序遍历顺序cin>>a;if(a=='-')t=NULL;else{t = new Bitree;t->data = a;t->lchild=GreatBitree(t->lchild);t->rchild=GreatBitree(t->rchild);}return t;}void Firstorder(Bitree *t)//先序遍历输出{if(t){cout<<t->data;Firstorder(t->lchild);Firstorder(t->rchild);}}void Midorder(Bitree *t)//中序遍历输出{if(t){Midorder(t->lchild);cout<<t->data;Midorder(t->rchild);}}void Lastorder(Bitree *t)//后序遍历输出{if(t){Lastorder(t->lchild);Lastorder(t->rchild);cout<<t->data;}}int main(){int nl;cin>>nl;while(nl--){Bitree *t;t = new Bitree;getchar();t=GreatBitree(t);Firstorder(t);cout<<endl;Midorder(t);cout<<endl;Lastorder(t);cout<<endl;}return 0;} 


原创粉丝点击