#include <iostream>
#include <stdlib.h>
#include <stdio.h>
struct tree//构建二叉树的节点
{
int lch,rch;
};
tree t[10005];//最多有10000个元素
int max(int a,int b)
{
return a>b? a:b;//返回较大的数的函数
}
int dfs(int n)//dfs计算深度
{
return n?max(dfs(t[n].lch),dfs(t[n].rch))+1:0;//递归调用,返回深度最大的数
}
int main()
{
int n;
scanf("%d",&n);//节点的个数
for(int i=1;i<=n;i++)
scanf("%d%d",&t[i].lch,&t[i].rch);//输入n个节点
printf("%d\n",dfs(1));//从第一个节点开始查询
return 0;
}
本题使用dfs递归调用较为简单,构建节点后全部存入数组。然后递归比较左右子节点最大的深度,如果n为0,直接返回0,如果n不等于0,就返回计算的最大深度加一的值。注意递归时应考虑左右子节点调用取最大值。