洛谷 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;
}
原文地址:https://www.cnblogs.com/littlepage/p/13051632.html