洛谷 P4913 【深基16.例3】二叉树深度
P4913 【深基16.例3】二叉树深度
题目描述
给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 11),如果是叶子节点,则输入0 0
。建好树后希望知道这棵二叉树的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。
最多有 10^6106 个结点。
输入格式
无
输出格式
无
输入输出样例
**输入 **
7
2 7
3 6
4 5
0 0
0 0
0 0
0 0
**输出 **
4
这道题考察了二叉树深度,我们进行构造一个struct节点,然后进行一次dfs,把层级传入即可得出最终的层数。
#include <iostream>
#include <cstdio>
using namespace std;
struct node {
int val, left, right;
}n[1001000];
int N, root = 0, maxLevel = 0;
bool isroot[1001000] = {0};
void dfs(int root, int level) {
maxLevel = max(maxLevel, level);
if(n[root].left != 0) dfs(n[root].left, level + 1);
if(n[root].right != 0) dfs(n[root].right, level + 1);
}
int main() {
scanf("%d", &N);
for(int i = 1; i <= N; i++) {
scanf("%d%d", &n[i].left, &n[i].right);
isroot[n[i].left] = isroot[n[i].right] = 1;
}
while(isroot[root]) root++;
dfs(root, 1);
printf("%d", maxLevel);
return 0;
}