题目描述
给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 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; }