#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; }