问题 B: 树的高度
题目描述
一棵树有n个节点,其中1号节点为根节点。
输入
第一行是整数n,表示节点数
后面若干行,每行两个整数a b,表示b是a的子节点。
输出
求这棵树的高度(根节点为第1层)
样例输入
5 1 2 1 3 3 4 3 5
样例输出
3
AC代码:
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
const int maxn = 1001;
struct node{
int layer;
int data;
vector<int> child;
}Node[maxn];
//相应层序遍历
int high ;
void LayerOrder(int root){
high=0;
queue<int> Q;
Q.push(root);
Node[root].layer = 1;//记根结点层号为 1
while(!Q.empty()){
int front = Q.front();//取出队头元素
if(Node[front].layer > high) high = Node[front].layer;
Q.pop();
for(int i = 0;i<Node[front].child.size();i++){
int child = Node[front].child[i];
Node[child].layer = Node[front].layer + 1;
Q.push(child);//将当前结点的所有子结点入队
}
}
}
int main(){
int n,a,b;
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n-1;i++){
scanf("%d%d",&a,&b);
Node[a].child.push_back(b);
}
LayerOrder(1);
printf("%d\n",high);
}
return 0;
}
/**************************************************************
Problem: 2450
User: 2015212040209
Language: C++
Result: 正确
Time:0 ms
Memory:1960 kb
****************************************************************/