- 题目描述
现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
- 输入描述
输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成,
下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号
- 输出描述
输出树的高度,为一个整数
- 输入
5
0 1
0 2
1 3
1 4
- 输出
3
python代码
n = int(input())
high = [1] * n
num = [0] * n
for i in range(n - 1):
parent, children = map(int, input().split()) #map会根据提供的函数对指定的序列做映射
if num[parent] < 2 :
high[children] = high[parent] + 1
num[parent] += 1
else :
num[parent] = 2 #防止不合法的二叉树的高度继续增加
num[children] = 2
print(max(high))
C++代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n, parent, children;
cin >> n;
vector<int> high(n); //需要预先声明size
vector<int> num(n);
high[0] = 1;
num[0] = 0;
for(int i = 0;i < n - 1;i ++){
cin >> parent;
cin >> children;
if(num[parent] < 2){
high[children] = high[parent] + 1;
num[parent] += 1;
}
else{
num[parent] = 2;
num[children] = 2;
}
}
auto maxElem = max_element(high.begin(), high.end()); //判断数组中最大最小值的函数
cout << * maxElem;
}
算法思想
维护两个数组,一个数组存储高度,一个数组存储当前节点的子节点数目,当子节点超过两个的时候,要进行剪枝