//二叉树
typeof int TElemType;
typedef struct BiTNode{
TElemType data;
struct BiTNode*lchild;
struct BiTNode*rchild;
}BiTNode,*BiTree;
//先根遍历
void PreRootTraverse(BiTree T){
if(T!=NULL){
printf("%c",T->data);
PreRootTraverse(T->lchild);
PreRootTraverse(T->rchild);
} }
//中根遍历
void InRootTraverse(BiTree T){
if(T!=NULL){
PreRootTraverse(T->lchild);
printf("%c",T->data);
PreRootTraverse(T->rchild);
}}
//查找
bool SearchNode(BiTree&T,char x){
if(T!=NULL){
if(T->data==x){
return 1;
}
else{
return(SearchNode(T->lchild,x)?SearchNode(T->lchild):SearchNode(T->rchild));
}
}
return 0;
}
//统计节点数目
void CountNode(BiTree T,int &num){
if(T!=NULL){
num++;
CountNode(T->lchild,num);
CountNode(T->rchild,num);
}
}
//求深度
int Depth(BiTree T){
int DepthLeft,DepthRight,Depthval;
if(T!=NULL){
DepthLeft=Depth(T->lchild);
DepthRight=Depth(T->rchild);
Depthval=1+(DepthLeft>=DepthRight)?DepthLeft:DepthRight;
}
else{
Depthval=0;
}
return Depthval;
}
//判两个数是否相等
bool IsEqual(BiTree&T1,BiTree&T2){
if(T1==NULL&&T2==NULL){
return 1;
}
if(T1!=NULL&&T2!=NULL){
if(T1->data==T2.data)
if(T1->lchild->data==T2->lchild->data)
if(T1->rchild->data==T2->rchild->data)
return 1;
}
return 0;
}
//建立一个二叉树
BiTree ComCreateBiTree(char ch[],int index){
BiTree T=NULL;
if(ch[index]!=NULL){
T=(BiTree)malloc(sizeof(BiTNode));
T->data=ch[index];
T->lchild=ComCreateBiTree(ch,2*index+1);
T->rchild=ComCreateBiTree(ch,2*index+2);
}
return T;
}
int main(){
char ch[20]="ABCDEFG";
BiTree T;
T=ComCreateBiTree(ch,0);
printf("先根遍历:");
PreRootTraverse(T);
printf("深度为%d",Depth(T));
}