#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct BiTNode{ // 二叉树结点结构
char data; // 结点数据
struct BiTNode *lchild; // 左孩子
struct BiTNode *rchild; // 右孩子
}BiTNode,*BiTree;
BiTree CreateBiTree(BiTree T);
void TraversalBiTree1(BiTree T);
void TraversalBiTree2(BiTree T);
void TraversalBiTree3(BiTree T);
int Deep(BiTree T);
int main(void)
{ BiTree T=NULL;
T=CreateBiTree(T);
printf("先序遍历:\n");
TraversalBiTree1(T);
printf("\n");
printf("中序遍历:\n");
TraversalBiTree2(T);
printf("\n");
printf("后序遍历:\n");
TraversalBiTree3(T);
printf("\n");
printf("树的深度:%d",Deep(T));
return 0;
}
BiTree CreateBiTree( BiTree T)//先序递归创建
{
char ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
exit(-1);
T->data=ch; // 生成根节点
T->lchild=CreateBiTree(T->lchild);// 构造左子树
T->rchild=CreateBiTree(T->rchild);// 构造右子树
}
return T;
}
void TraversalBiTree1( BiTree T)//先序遍历
{
if(T == NULL)
return;
printf("%c ",T->data);
TraversalBiTree1(T->lchild);
TraversalBiTree1(T->rchild);
}
void TraversalBiTree2( BiTree T)//中序遍历
{
if(T == NULL)
return;
TraversalBiTree2(T->lchild);
printf("%c ",T->data);
TraversalBiTree2(T->rchild);
}
void TraversalBiTree3( BiTree T)//后序遍历
{
if(T == NULL)
return;
TraversalBiTree3(T->lchild);
TraversalBiTree3(T->rchild);
printf("%c ",T->data);
}
int Deep(BiTree T)//求深度
{
int lchild,rchild;
if(T == NULL)
return 0;
lchild = 1 + Deep(T->lchild);
rchild = 1 + Deep(T->rchild);
return lchild>rchild?lchild:rchild;
}