二叉树:编写一个函数int Depth(BiTNode *T)。函数功能:计算二叉树的深度。

时间:2025-03-12 11:58:32
#include <> #include <> typedef struct BiTNode { int data; //关键字项 struct BiTNode *lchild,*rchild; //左右孩子指针 } BiTNode; BiTNode *CreateBST(int A[],int n); void DispBST(BiTNode *bt); int InsertBST(BiTNode *&p,int k); int Depth(BiTNode *T)//计算二叉树的深度 { int d1,d2; if(T==NULL){ return 0; }else{ d1=Depth(T->lchild); d2=Depth(T->rchild); return d1>d2?d1+1:d2+1; } } int main() { BiTNode *bt,*p; int n=12,x=46; int a[]= {25,18,46,2,53,39,32,4,74,67,60,11}; int depth; bt=CreateBST(a,n); DispBST(bt); printf("\n"); depth=Depth(bt); printf("树的深度为:%d\n",depth); return 0; } void DispBST(BiTNode *bt)//输出一棵排序二叉树 { if (bt!=NULL) { printf("%d",bt->data); if (bt->lchild!=NULL || bt->rchild!=NULL) { printf("("); //有孩子结点时才输出( DispBST(bt->lchild); //递归处理左子树 if (bt->rchild!=NULL) printf(","); //有右孩子结点时才输出, DispBST(bt->rchild); //递归处理右子树 printf(")"); //有孩子结点时才输出) } } } int InsertBST(BiTNode *&p,int k)//递归算法,在p所指向的二叉排序树中,插入值为k的节点 { if (p==NULL) //原树为空, 新插入的记录为根结点 { p=(BiTNode *)malloc(sizeof(BiTNode)); p->data=k; p->lchild=p->rchild=NULL; return 1; } else if (k==p->data) //树中存在相同关键字的结点,返回0 return 0; else if (k<p->data) return InsertBST(p->lchild,k); //插入到*p的左子树中 else return InsertBST(p->rchild,k); //插入到*p的右子树中 } BiTNode *CreateBST(int A[],int n) //由有n个元素的数组A,创建一个二叉排序树。返回BST树根结点指针 { BiTNode *bt=NULL; //初始时bt为空树 int i=0; while (i<n) { InsertBST(bt,A[i]); //将关键字A[i]插入二叉排序树T中 i++; } return bt; //返回建立的二叉排序树的根指针 }