#include <iostream>
#include <stdio.h>
using namespace std;
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree createBiTree(BiTree T)
{
char ch;
cin>>ch;
if(ch=='#')
return NULL;
else
{
T=new BiTNode;
T->data=ch;
T->lchild=createBiTree(T->lchild);
T->rchild=createBiTree(T->rchild);
}
return T;
}
/*
BiTree createBiTree()
{
BiTree T;
char ch;
cin>>ch;
if(ch=='#')
return NULL;
else
{
T=new BiTNode;
T->data=ch;
T->lchild=createBiTree();
T->rchild=createBiTree();
}
return T;
}*/
//中序遍历
void inTraverse(BiTree T)
{
if(T)
{
inTraverse(T->lchild);
cout<<T->data<<" ";
inTraverse(T->rchild);
}
}
//先序遍历
void preTraverse(BiTree T)
{
if(T)
{
cout<<T->data<<" ";
preTraverse(T->lchild);
preTraverse(T->rchild);
}
}
//后序遍历
void postTraverse(BiTree T)
{
if(T)
{
postTraverse(T->lchild);
postTraverse(T->rchild);
cout<<T->data<<" ";
}
}
//层次遍历
void levelTraverse(BiTree T)
{
BiTree p[];
int f=,r=;
if(T)
{
p[r++]=T;
while(f!=r)
{
cout<<p[f]->data<<" ";
if(p[f]->lchild)
p[r++]=p[f]->lchild;
if(p[f]->rchild)
p[r++]=p[f]->rchild;
f++;
}
}
}
//求结点数目
int getNodes(BiTree T)
{
if(!T)
return ;
return getNodes(T->lchild)+getNodes(T->rchild)+;
}
//求叶子结点数
int getleave(BiTree T)
{
if(!T)
return ;
if(!T->lchild&&!T->rchild)
return ;
return getleave(T->lchild)+getleave(T->rchild);
}
//求树的深度
int depth(BiTree T)
{
int ld,rd;
if(!T)
return ;
ld=depth(T->lchild);
rd=depth(T->rchild);
return ld>rd?ld+:rd+;
}
int main()
{
BiTree T;
T=createBiTree(T);//T=createBiTree();函数功能不需要参数时,形参就可以省写
cout<<"先序遍历序列为"<<endl;
preTraverse(T);
cout<<endl;
cout<<"中序遍历序列为"<<endl;
inTraverse(T);
cout<<endl;
cout<<"后序遍历序列为"<<endl;
postTraverse(T);
cout<<endl;
cout<<"层次遍历序列为"<<endl;
levelTraverse(T);
cout<<endl;
cout<<"结点总数为"<<getNodes(T)<<endl;
cout<<"叶子结点总数为"<<getleave(T)<<endl;
cout<<"树的深度为"<<depth(T)<<endl;
return ;
}