#include <iostream>
using namespace std;
struct Data
{
char no;
string name;
};
typedef struct Node
{
struct Data data;
Node *left;
Node *right;
}BitTreeNode,*BitTree;
//创建二叉树,先序顺序输入,空用“#”代替。
void build_tree(BitTree &T)
{
char temp_no;
string name;
cin>>temp_no;
//cin>>name;
if('#'==temp_no)
{
T =NULL;
}
else
{
T = new BitTreeNode;
T->data.no=temp_no;
build_tree(T->left);
build_tree(T->right);
}
}
//获取树高度
int get_Tree_Height(BitTree T)
{
if(T==NULL)
return 0;
int leftHeight = get_Tree_Height(T->left);
int rightHeight = get_Tree_Height(T->right);
int Maxer = leftHeight>rightHeight?leftHeight:rightHeight;
return Maxer+1;
}
//先序遍历
void Front_show_tree(BitTree &T)
{
if(T!=NULL)
{
cout<<T->data.no;
Front_show_tree(T->left);
Front_show_tree(T->right);
}
else
{
cout<<"#";
}
}
//中序遍历
void Middle_show_tree(BitTree &T)
{
if(T!=NULL)
{
Middle_show_tree(T->left);
cout<<T->data.no;
Middle_show_tree(T->right);
}
}
//后序遍历
void Behind_show_tree(BitTree &T)
{
if(T!=NULL)
{
Behind_show_tree(T->left);
Behind_show_tree(T->right);
cout<<T->data.no;
}
}
void print_tree(BitTree T,int level)
{
if(level<1||T ==NULL)
return ;
if(1==level)
{
cout<<T->data.no<<" ";
return;
}
print_tree(T->left,level-1);
print_tree(T->right,level-1);
}
void levelTravel(BitTree &T)
{
if(T==NULL)
{
return;
}
int deepth = get_Tree_Height(T);
for(int i=1;i<=deepth;i++)
{
print_tree(T,i);
cout<<endl;
}
}
int main()
{
BitTree T;
build_tree(T);
Front_show_tree(T);
cout<<endl;
Middle_show_tree(T);
cout<<endl;
Behind_show_tree(T);
cout<<endl;
//levelTravel(T);
return 0;
}