#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct BitNode { char data; struct BitNode * lchild, * rchild; }* Bitree,BitNode; //数据结点的说明 Bitree createbitree() { Bitree T; char ch; scanf("%c",&ch); //应该连续输入,因为enter键也是字符 if(ch=='*') T=NULL; else { T=(Bitree)malloc(sizeof(BitNode)); if(!T) exit(-1); T->data=ch; T->lchild=createbitree(); T->rchild=createbitree(); } return T; } //二叉树的创建 void visit(Bitree T) { if(T) { printf("%c ",T->data); visit(T->lchild); visit(T->rchild); } } //中序访问二叉树 int depth(Bitree T) { int dep1,dep2; if(T==NULL) return(0); else { dep1=depth(T->lchild); dep2=depth(T->rchild); if(dep1>dep2) return(dep1+1); else return(dep2+1); } } //二叉树深度的递归算法 main() { Bitree Q; Q=createbitree(); visit(Q); printf("\n"); int height; height=depth(Q); printf("the height is %d\n",height); } ------此文件为bit.c------------------------------------ 运行情况: $./bit abd*g**e*hj*k***c*f*i** a b d g e h j k c f i the height is 6 $ 总结:a. 1.知道abd*g**e*hj*k***c*f*i**这样一个被*号分隔的序列 2.知道此序列的构造方式(先序,后序,中序等等) 可以确定这颗二叉树 b. 1.只知道abdgehjkcfi这样一个连续序列 2.也知道此序列的构造方式(先序,后序,中序等等) 不可以确定这颗二叉树,但通过两个不同构造方式的两个不同连续序列就可以确定 |