P4913 【深基16.例3】二叉树深度(水题)

题目描述

给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 111),如果是叶子节点,则输入0 0。建好树后希望知道这棵二叉树的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。

最多有 10610^6106 个结点。

输入格式

输出格式

输入输出样例

输入 #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=0;
struct node
{
    int num;
    int l;
    int r;
}tree[1000005];
void dfs(int k,int layer)
{
    if(tree[k].l==0&&tree[k].r==0)
    {
        ans=max(ans,layer);
        return;
    }
    if(tree[k].l)dfs(tree[k].l,layer+1);
    if(tree[k].r)dfs(tree[k].r,layer+1);
}
int main()
{
    cin>>n;
    int i;
    for(i=1;i<=n;i++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        tree[i].num=i;
        tree[i].l=x,tree[i].r=y;
    }
    dfs(1,1);
    cout<<ans;
    return 0;
}
原文地址:https://www.cnblogs.com/lipoicyclic/p/12706273.html