P4913 【深基16.例3】二叉树深度 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
分析:
使用递归,我们需要知道,二叉数的深度等于左右子树深度的较大值加一(因为需要加上根节点);当探到空树的时候就结束递归并返回0.
流程:
-
struct hope
定义了一个结构体,用于表示二叉树的节点。每个节点包含两个整型变量l
和r
,分别表示左子树和右子树的索引。 -
max
函数用于比较两个整数的大小,返回较大的值。 -
d
函数是一个递归函数,用于计算以节点c
为根的子树的深度。如果节点c
为0,表示空节点,直接返回0。否则,递归调用d
函数计算左子树和右子树的深度,并返回较大值加1。 -
在
main
函数中,首先通过scanf
函数读取输入的整数n
,表示二叉树的节点个数。 -
然后,使用一个循环读取每个节点的左子树和右子树的索引,并存储在结构体数组
f
中。 -
接下来,调用
d
函数计算以根节点1
为根的二叉树的深度,并使用printf
函数输出结果。 -
最后,返回0表示程序正常结束。
代码:
#include <stdio.h>
struct hope
{
int l,r;
}f[1000001];
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int d(int c)
{
if(c==0)
return 0;
return max(d(f[c].l),d(f[c].r))+1;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&f[i].l,&f[i].r);
}
printf("%d\n",d(1));
return 0;
}