练习题二:树的高度

题目描述

现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度

输入描述:

输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成,

下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号。

输出描述:

输出树的高度,为一个整数

Python解法

# -*- coding:utf-8 -*-
import sys

def tree_height(root):
  if len(tree[root]) == 0:
    return 1
  node_list = []
  for i in tree[root]:
    node_list.append(tree_height(i))
  return max(node_list) + 1

if __name__ == "__main__":
  n = sys.stdin.readline().strip()
  tree = []
  for i in range(int(n)):
    tree.append([])
  for i in range(int(n)-1):
    father, child = map(int, sys.stdin.readline().strip().split())
    if len(tree[father]) <= 1 :
      tree[father].append(child)
  print(tree_height(0))

原文地址:https://www.cnblogs.com/HwyStudy/p/9120774.html

时间: 2024-10-30 23:16:24

练习题二:树的高度的相关文章

查找二 树与图的搜索

搜索对象是一个数据的集合(称为搜索表),除了执行搜索外,还可能执行其他操作,例如添加新元素,这样可能会改变搜索表的结构.因此,搜索表可以区分为静态搜索表(表的结构不发生改变)和动态搜索表两种情况. 常见的适用于静态搜索表的搜索方法有:顺序搜索.折半搜索.Fibonacci搜索等. 适用于动态搜索表的搜索方法有:二叉排序算法,平衡二叉搜索算法. 二叉排序树搜索 二叉排序树(Binary sort Tree,BST)又称为二叉查找(搜索)树(Binary Search Tree) .其必须为二叉排序

树的高度

题目: 有一颗树,不一定是二叉树,有n个节点,编号为0到n-1.有一个数组A,数组的索引为0到n-1,数组的值A[i]表示节点i的父节点的id,根节点的父节点id为-1.给定数组A,求得树的高度. 分析: 这个题目我们把数组写出来,然后分析,就很明了了.如下例子: 值 3 3 3 -1 2 index 0 1 2 3 4 根据题意: 节点0,1,2的父节点为3 节点3是根节点 节点4的父节点为2 解法: 一个直接的解法是,遍历数组A中的每一个元素,回溯到根节点,得到这个节点的高度.遍历完毕数组之

数据结构例程——以孩子兄弟链存储的树的高度

本文是数据结构基础系列(6):树和二叉树中第5课时树的存储结构的例程. 例: 以孩子-兄弟链作为存储结构,求树的高度 源程序:[说明--函数TreeCreate仅创建了如上图所示的图,不具有通用性.] #include <stdio.h> #include <malloc.h> typedef char ElemType; typedef struct tnode { ElemType data; //节点的值 struct tnode *hp; //指向兄弟 struct tno

树的高度,深度,层数和三种遍历方式

树的高度: 当只有一个根节点的时候,高度就是0. //计算树的高度int depth(Node node){ if(node == NULL) return -1; int l = depth(node->left); int r = depth(node->right); return (l < r)?(r+1):(l+1);//当只有一个根节点的时候,高度就是-1+1=0} 层数: 树的高度最底下的为第1层(有的书定义为第0层),依次向上累加 树的深度: 完全二叉树是指这样的二叉树:

待字闺中之树的高度分析

有一个棵树,不一定是二叉树,有n个节点,编号为0到n-1.有一个数组A,数组的索引为0到n-1,数组的值A[i]表示节点i的父节点的id,根节点的父节点id为-1.给定数组A,求得树的高度. 分析这个题目我们首先把数组写出来,然后进一步分析,就很明了了,如下例子: 333-1201234根据题意: 节点0,1,2的父节点为3 节点3是根节点 节点4的父节点为2 一个很直接的解法是,遍历数组A中的每一个元素,回溯到根节点,得到这个节点的高度.遍历完毕数组之后,取最大的,就是树的高度.上面的例子大概

C#算法实现获取树的高度

我们知道,树类型作为数据结构中的重要一员,树的很多实现都是来自递归.本文想要实现的就是在桌面客户端项目开发中,经常用到的树结构(.Net平台下有个控件为TreeView).事实上,我们可能因业务需求自行定义一个树类型的数据结构. 接下来,首先给出我一开始用来获取树的深度的算法实现(存在欠缺) private int GetExportReportTemplateColumns(ReportTemplateTreeDTO reportTemplateTree, int reportTemplate

python/MySQL练习题(二)

python/MySQL练习题(二) 21.查询各科成绩前三名的记录:(不考虑成绩并列情况) 1 select score.sid,score.course_id,score.num,T.first_num,T.second_num from score left join 2 ( 3 select 4 sid, 5 (select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 0,1

C++编程基础一 33-编程练习题二

1 // 33-编程练习题二.cpp: 定义控制台应用程序的入口点. 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 #include <climits> 7 #include <array> 8 #include <math.h> 9 #include <string> 10 using namespace std; 11 12 enum CH 13 { 14 A,

树的高度(并不需要建树,并不需要考虑谁是谁的孩子,因为输入保证了先父节点)

题目描述 现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度 输入描述: 输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成, 下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号 输出描述: 输出树的高度,为一个整数 示例1 输入 5 0 1 0 2 1 3 1 4 输出 3 # import sys # # sys.stdin = open('input.txt','r') n = i