题目描述
给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 11),如果是叶子节点,则输入0 0
。建好树后希望知道这棵二叉树的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。
最多有 10^6106 个结点。
输入格式
无
输出格式
无
输入输出样例
输入 #1复制
7 2 7 3 6 4 5 0 0 0 0 0 0 0 0
输出 #1复制
4
上代码:
#include <iostream>
#define _for(i, a, b) for (int i=(a); i<=(b); i++)
using namespace std;
const int MAXN = 1e6 + 10;
struct node {
int left, right;
};
node tree[MAXN];//存储结构定义
int n, ans;
void dfs(int id, int deep) {
if (id == 0) return ;//到达叶子节点时返回
ans = max(ans, deep);//更新答案
dfs(tree[id].left, deep+1);//向左遍历
dfs(tree[id].right, deep+1);//向右遍历
}
int main() {
cin >> n;
_for (i, 1, n) cin >> tree[i].left >> tree[i].right;//读入+建树
dfs(1, 1);//从1号节点出发,当前深度为1
cout << ans << endl;//输出答案
return 0;//完结撒花!
}
61