题目描述
一棵树有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;
}