描述
构造一个二叉树类,实现创建二叉树和对二叉树进行前序、中序、后序遍历
输入
扩展的前序序列.在一棵树处理结束后,根据响应判断是否处理下一棵树
输出
前序、中序、后序
样例输入
ab##c##
Y
abc####
N
样例输出
abc
bac
bca
abc
cba
cba
#include<iostream>
using namespace std;
struct Node{
char data;
Node *lchild,*rchild;//左右孩子指针
};
class Tree{
Node *root;
Node *creat();//创建二叉树
void pre(Node *root);//前序遍历
void in(Node *root);//中序遍历
void post(Node *root);//后序遍历
public:
Tree();//构造函数
//无参函数体为私有的有参函数,在主函数中使用
void pre(){pre(root);}
void in(){in(root);}
void post(){post(root);}
};
Tree::Tree(){
root=creat();
}
Node *Tree::creat(){
Node *root;
char ch;
cin>>ch;
if(ch=='#')
root=NULL;
else{
root=new Node;
root->data=ch;
root->lchild=creat();
root->rchild=creat();
}
return root;
}
void Tree::pre(Node *root){
if(root==NULL) return;
else{
cout<<root->data;
pre(root->lchild);
pre(root->rchild);
}
}
void Tree::in(Node *root){
if(root==NULL) return;
else{
in(root->lchild);
cout<<root->data;
in(root->rchild);
}
}
void Tree::post(Node *root){
if(root==NULL) return;
else{
post(root->lchild);
post(root->rchild);
cout<<root->data;
}
}
int main()
{
while(1)
{
char c;
Tree t;
cin>>c;
t.pre();
cout<<endl;
t.in();
cout<<endl;
t.post();
cout<<endl;
if(c=='N') return 0;
}
}