0
点赞
收藏
分享

微信扫一扫

问题 B: 树的高度

东言肆语 2022-02-04 阅读 42
深度优先

题目描述
一棵树有n个节点,其中1号节点为根节点。

输入
第一行是整数n,表示节点数

后面若干行,每行两个整数a b,表示b是a的子节点。

输出
求这棵树的高度(根节点为第1层)

样例输入

5
1 2
1 3
3 4
3 5

样例输出

3

思路:由于不关心数据域,所以之间用vector保存各结点之间的父子关系即可。

#include <cstdio>
#include <vector>
using namespace std;

int max_deep;
void DFS(vector<int> node[], int index, int deep) {
    if (node[index].size() == 0) {
        if (deep > max_deep) { //更新最大深度
            max_deep = deep;
        }
        return;
    }
    for (int i = 0; i < node[index].size(); ++i) { //对所有子节点DFS
        DFS(node, node[index][i], deep + 1);
    }
}

int main() {
    int n, root, child;
    while (scanf("%d", &n) != EOF) {
        vector<int> node[n + 1];
        for (int i = 0; i < n - 1; ++i) {
            scanf("%d %d", &root, &child);
            node[root].push_back(child);
        }
        max_deep = 1;
        DFS(node, 1, 1);
        printf("%d\n", max_deep);
    }
    return 0;
}
举报

相关推荐

0 条评论