一.概念
已知一个节点求它的深度,等价于求节点的左右子节点的深度的较大者再加一.递归式如下:
二.代码实现
int TreeDepth(TREE *T)
{
int m=0,n=0;
if(T==NULL)
return 0;
m=TreeDepth(T->left);
n=TreeDepth(T->right);
return (m>n?m:n)+1;
}
三.举例
struct TREE
{
int data;
TREE *left,*right;
};
int main(){
TREE *tree=new TREE;
tree->data=3;
TREE *p=new TREE;
p->data=5;
p->left=NULL;
tree->left=p;
p=new TREE;
p->data=7;
p->left=NULL;
p->right=NULL;
tree->left->right=p;
p=new TREE;
p->data=6;
tree->right=p;
p=new TREE;
p->data=8;
p->left=NULL;
p->right=NULL;
tree->right->left=p;
p=new TREE;
p->data=4;
p->left=NULL;
p->right=NULL;
tree->right->right=p;
int depth=TreeDepth(tree);
cout<<"树的深度是"<<depth<<endl;
return 0;
}
结果:
四.求树的深度还有另外一种解法,没有上面那个好理解,代码如下
int TreeDepth(TREE *T,int n=0)
{
int static max=0;
if(T==NULL)
return 0;
if(T->left!=NULL||T->right!=NULL)
{
n=n+1;
TreeDepth(T->left,n);
TreeDepth(T->right,n);
}
else
if(max<++n)
max=n;
return max;
}