#include<stdio.h>//输入输出流 #include<stdlib.h>//标准库 typedef struct node { int data; struct node *lchild; struct node *rchild; }*bitree,bitnode; //构造一个新的二叉树 bitree initbitree(bitnode *root) { bitree tree=root; return tree; } //生成节点包含数据域和左右孩子 bitnode *makenode(int item, bitnode *lchild,bitnode *rchild) { bitnode *pnode=(bitnode*)malloc(sizeof(bitnode)); if(pnode) { pnode->data=item; pnode->lchild=lchild; pnode->rchild=rchild; } return pnode; } //释放节点 void freenode(bitnode *pnode) { if(pnode!=NULL) free(pnode); } //销毁二叉树 void destorybitnode(bitree tree) { bitnode *pnode=tree; if(pnode->lchild!=NULL) { destorybitnode(pnode->lchild); } if(pnode->rchild!=NULL) { destorybitnode(pnode->rchild);//递归调用 } freenode(pnode); } //判断是否为空 int isempty(bitree tree) { if(tree==NULL) return 0; else return 1; } //返回树的深度 int GetDepth(bitree tree) { int cd,ld,rd; cd=ld=rd=0; if(tree) { ld=GetDepth(tree->lchild); rd=GetDepth(tree->rchild); cd=(ld>rd?ld:rd); return cd+1; } else { return 0; } } //返回根 bitree get(bitree tree) { return tree; } //返回节点值 int getint(bitnode *pnode) { return pnode->data; } //设置节点值 void setint(bitnode *pnode, int item) { pnode->data=item; } //设置左子树 bitree setlchild(bitree parent,bitree lchild) { parent->lchild=lchild; return lchild; } //设置右子树 bitree setrchild(bitree parent,bitree rchild) { parent->rchild=rchild; return rchild; } //返回左子树 bitree getlchild(bitree tree) { if(tree!=NULL) return tree->lchild; else return NULL; } //返回右子树 bitree getrchild(bitree tree) { if(tree!=NULL) return tree->rchild; else return NULL; } //插入新的子树,lr为0插入左子树,为1插入右子树 bitree insertchild(bitree parent,int lr,bitree child) { if(parent) { if(lr==0&&parent->lchild==NULL) { parent->lchild=child; return child; } if(lr==1&&parent->rchild==NULL) { parent->rchild=child; return child; } } } //删除子树lr为0删除左子树,为1删除右子树 void deletechild(bitree parent,int lr) { if(parent) { if(lr=0 && parent->lchild!=NULL) { parent->lchild=NULL; freenode(parent->lchild);//释放空间 } if(lr=1 && parent->rchild!=NULL) { parent->rchild=NULL; free(parent->rchild); } } } int main() { bitnode *n1=makenode(10,NULL,NULL); bitnode *n2=makenode(20,NULL,NULL); bitnode *n3=makenode(30,n1,n2); bitnode *n4=makenode(40,NULL,NULL); bitnode *n5=makenode(50,NULL,NULL); bitnode *n6=makenode(60,n4,n5); bitnode *n7=makenode(70,NULL,NULL); bitree tree=initbitree(n7);//n7为根节点 setlchild(tree,n3);//n3为n7的左子树 setlchild(tree,n6);//n6为n7的右子树 printf("第一次返回树的深度:%d\n",GetDepth(tree)); deletechild(tree,0); printf("第二次返回树的深度:%d\n",GetDepth(tree)); return 0; }