题目描述:
一棵树有n个节点,其中1号节点为根节点。
输入:
第一行是整数n,表示节点数
后面若干行,每行两个整数a b,表示b是a的子节点。
输出:
求这棵树的高度(根节点为第1层)
样例输入:
5
1 2
1 3
3 4
3 5
样例输出:
3
实现代码:
#include<cstdio>
#include<vector>
using namespace std;
const int maxn = 1000;
int depth;
struct node {
int rudu = 0;//记录入度
int flag = 0;//标记是否访问
vector<int> child;
};
void DFS(int index, int numnode, node Node[]) {
if(Node[index].child.size() == 0) {
if(numnode > depth) {
depth = numnode;
}
return;
}
for(int i = 0; i < Node[index].child.size(); i++) {
DFS(Node[index].child[i], numnode + 1, Node);
}
return;
}
int main() {
int n;
while(scanf("%d", &n) != EOF) {
int a, b;
node Node[maxn];
for(int i = 0; i < n - 1; i++) {
scanf("%d%d", &a, &b);
Node[a].child.push_back(b);
Node[b].rudu++;
Node[a].flag = 1;
Node[b].flag = 1;
}
int k;
for(k = 0; k < maxn; k++) {
if(Node[k].rudu == 0 && Node[k].flag == 1) {
break;
}
}
depth = 0;
DFS(k, 1, Node);
printf("%d\n", depth);
}
}