时间限制:1秒
空间限制:32768K
热度指数:13869
算法知识视频讲解
题目描述
现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
输入描述:
输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成, 下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号
输出描述:
输出树的高度,为一个整数
示例1
输入
5 0 1 0 2 1 3 1 4
输出
3
/*
树的遍历,从根节点开始dfs到底即可。
题目说是二叉树,但是数据是多叉树,某个节点存在两个以上儿子节点时要忽略
if(len>2) len=2;
for(int i=0;i<len;i++)
Max=max(Max,dfs(tree[x][i]));
*/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstdlib>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 1005;
vector<int> tree[maxn];
int mark[maxn];
int dfs(int x)
{
int len=tree[x].size();
if(len==0) return 1;
int Max=0;
if(len>2) len=2;
for(int i=0;i<len;i++)
Max=max(Max,dfs(tree[x][i]));
return Max+1;
}
int main(void)
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
tree[a].push_back(b);
mark[b]=1;
}
int res=0;
for(int i=0;i<n;i++)
{
if(mark[i]==0)
{
res=dfs(i);
break;
}
}
cout<<res<<endl;
}
return 0;
}