/*3. 完成对二叉树的二叉链表结构的定义。
并编写算法生成一棵二叉树,
以及编写二叉树的先序遍历、中序遍历、后序遍历算法,
并且验证各算法功能已实现。*/
#include<iostream>
using namespace std;
typedef char datatype;
typedef struct node *pointer; //结点指针类型
struct node //结点类型
{ datatype data;
pointer lchild,rchild;
};
typedef pointer bitree; //根结点指针
bitree pre_creat() //由先根序列建立二叉树,返回根指针
{
bitree t;
char ch;
cin>>ch;
if(ch=='@') return NULL; //虚结点
t=new node; //生成根结点
t->data=ch; //赋值
t->lchild=pre_creat(); //生成左子树
t->rchild=pre_creat(); //生成右子树
return t;
}
void preorder(bitree t) //先根遍历
{
if(t==NULL) return;
cout<<t->data; //访问根
preorder(t->lchild); //先根遍历左子树
preorder(t->rchild); //先根遍历右子树
}
void inorder(bitree t) //中根遍历
{
if(t==NULL) return;
inorder(t->lchild); //中根遍历左子树
cout<<t->data; //访问根
inorder(t->rchild); //中根遍历右子树
}
void posorder(bitree t)
{
if(t==NULL) return;
posorder(t->lchild); //后根遍历左子树
posorder(t->rchild); //后根遍历右子树
cout<<t->data; //访问根
}
int main()
{
bitree T;
cout<<"---------欢迎测试-------------"<<endl;
cout<<" 用先根序列建立二叉树: "<<endl;
T=pre_creat();
cout<<" 调用preorder()函数遍历二叉树 "<<endl;
preorder(T);
cout<<endl;
cout<<" 调用inorder()函数遍历二叉树 "<<endl;
inorder(T);
cout<<endl;
cout<<" 调用posorder()函数遍历二叉树 "<<endl;
posorder(T);
cout<<endl;
system("pause");
return 0;
}