题目描述
给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 1),如果是叶子节点,则输入0 0
。建好树后希望知道这棵二叉树的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。
最多有 10^6个结点。
输入格式
第一行一个整数 n,表示节点数。
之后 n 行,第 i 行两个整数 l、r,分别表示节点 i 的左右子节点。若 l=0 则表示无左子节点,r=0 同理。
输出格式
一个整数,表示最大节点深度。
输入输出样例
输入 #1
7 2 7 3 6 4 5 0 0 0 0 0 0 0 0
输出 #1
4
#include<bits/stdc++.h>
using namespace std;
int n,ans;
struct node{
int l;
int r;
int h;
};
node tree[1000001];
void dfs(int x)
{
if(x==0) return;
tree[tree[x].l].h=tree[x].h+1;
tree[tree[x].r].h=tree[x].h+1;
dfs(tree[x].l);
dfs(tree[x].r);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>tree[i].l>>tree[i].r;
tree[1].h=1;
int m=0;
dfs(1);
// for(int i=1;i<=n;i++)
// cout<<tree[i].h;
for(int i=1;i<=n;i++)
if(tree[i].h>=m)
m=tree[i].h;
cout<<m<<endl;
}