#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct BiTNode
{ ElemType data;
struct BiTNode * lchild,* rchild;
}BiTNode,*BiTree;
bool CreateBitPre(BiTree &T)//先序遍历创建二叉树
{
char ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else{
T=(BiTNode *)malloc(sizeof(BiTNode));
if(T==NULL) return false;
T->data=ch;
CreateBitPre(T->lchild);
CreateBitPre(T->rchild);
}
return true;
}
void visit(BiTree T)
{
printf("%c", T->data);
}
void PreOrder(BiTree T)//先序遍历
{
if(T !=NULL)
{
visit(T);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void InOrder(BiTree T)//中序遍历
{
if(T !=NULL)
{
InOrder(T->lchild);
visit(T);
InOrder(T->rchild);
}
}
void PostOrder(BiTree T)//后序遍历
{
if(T !=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
visit(T);
}
}
int treeDepth(BiTree T)
{
if(T== NULL)
{
return 0;
}
else
{ int l= treeDepth(T->lchild);
int r= treeDepth(T->rchild);
return l>r? l+1 : r+1;
}
}
int main()
{BiTree T;
int c;
CreateBitPre(T);//先序遍历创建二叉树
printf("前序遍历:");
PreOrder(T);
printf("\n");
printf("中序遍历:");
InOrder(T);
printf("\n");
printf("后序遍历:");
PostOrder(T);
printf("\n");
printf("树的深度:");
c=treeDepth(T);
printf("%d",c);
return 0;
}