OJ 树的高度 *C++ python*

  • 题目描述
现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
  • 输入描述
输入的第一行表示节点的个数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;
}

算法思想

维护两个数组,一个数组存储高度,一个数组存储当前节点的子节点数目,当子节点超过两个的时候,要进行剪枝

猜你喜欢

转载自blog.csdn.net/weixin_36372879/article/details/81094290
今日推荐