打卡信奥刷题(454)用C++信奥P4913[普及组/提高] 【深基16.例3】二叉树深度
【深基16.例3】二叉树深度
题目描述
有一个 n(n≤106)n(n \le 10^6)n(n≤106) 个结点的二叉树。给出每个结点的两个子结点编号(均不超过 nnn),建立一棵二叉树(根节点的编号为 111),如果是叶子结点,则输入 0 0。
建好这棵二叉树之后,请求出它的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。
输入格式
第一行一个整数 nnn,表示结点数。
之后 nnn 行,第 iii 行两个整数 lll、rrr,分别表示结点 iii 的左右子结点编号。若 l=0l=0l=0 则表示无左子结点,r=0r=0r=0 同理。
输出格式
一个整数,表示最大结点深度。
样例 #1
样例输入 #1
7
2 7
3 6
4 5
0 0
0 0
0 0
0 0
样例输出 #1
4
C++实现
#include
#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);
cout << ans << endl;
return 0;
}

后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
更多推荐



所有评论(0)