父母结点数组表示的树的高度
来源:互联网 发布:东方快车杀人事件知乎 编辑:程序博客网 时间:2024/04/30 10:03
父母结点表示树
数组索引号对应的值是该索引号的父母结点
例如:parent = [-1 0 0 0 1 1 3 3 2]数组表示的树为:
两种方法求该树的高度
方法一
此方法为简单方法,时间复杂度为:O(n^2),主要思路为:从索引号0开始,求对应索引号在树中的高度,取较大值,然后求索引号1的高度,取较大值,依次循环遍历所有的结点,即可得到树的高度。
python实现
# n为树的结点总数def tree_height(parent, n): max_Height = 0 for vertex in range(n): height = 0 i = vertex while i != -1 height += 1 # 回溯找父母结点,直至找到根节点才停止 i = parent[i] max_Height = max(max_Height, height) return max_Height
方法二
此方法比方法一要高效。时间复杂度为O(n)。主要思路:首先算出所有结点的高度,保存在的depth数组中,然后从数组中找出最大值即为该树的高度。
该算法比方法一高效的原因在于:方法二保存了所有结点的高度,也就是在求某一结点的高度时,它的父母结点的高度可以直接从数组中获得,不需要在从头回溯找父母节点
求索引号i的高度的步骤:
1.如果i是根结点,则depth[i] = 1
2.如果parent[i],也就是i的父母结点已经计算,则depth[i] = depth[parent[i]] + 1
3.如果parent[i],也就是i的父母结点没有计算,则递归找到父母结点,然后再给depth[i]赋值为:depth[i] = depth[parent[i]] + 1
python实现
# 计算某一结点的高度def fill_Depth(parent, parent[i], depth): if depth[i] != 0: return # 如果该结点为根结点 if parent[i] = -1: depth[i] = 1 return # 若该结点的父母结点的高度没有计算 if depth[parent[i]] == 0: fill_Depth(parent, parent[i], depth) depth[i] = depth[parent[i]] + 1def findDepth(parent,n): # 初始化depth数组 depth = [0 for i in range(n)] for i in range(n): fill_depth(parent, parent[i], depth) max_Height = depth[0] for i in range(1, n): max_Height = max(max_Height, depth[i]) return max_Height
0 0
- 父母结点数组表示的树的高度
- 树-----求叶子结点数目,结点数目,树的高度
- 二叉树的结点度表示法
- 将一棵二叉树的所有结点存储在一维数组中,虚结点用#表示,利用性质5
- 二叉树的叶结点和高度
- 二叉树深拷贝构造及求node*父母结点的实现
- 数据结构二叉树的实现(#表示空结点)
- AVL 树高度和结点数的关系
- 计算二叉树的高度和结点数
- 计算二叉树的高度和结点数
- 1019_计算二叉树的高度和结点数
- 计算二叉树的高度和结点数
- 求二叉树的高度、结点数和叶结点数
- 求二叉树的高度、结点数和叶结点数
- 双亲表示(数组表示)的树的基本操作
- 图的数组表示
- 数组的表示javascript
- 数组的内存表示
- Android Studio 2.0+ Error:Protocol family unavailable
- C语言文件指针与文件描述符之间可以相互转换
- three.js学习笔记 Physijs物理引擎
- 去掉android2.3之后系统自带下拉效果
- 有关ViewFlipper的使用及设置动画效果的讲解
- 父母结点数组表示的树的高度
- c++之构造函数与析构函数
- 模拟器反应特别慢 - 打印输出Simulator slow-motion animations are now on
- vb输入输出
- Android 屏幕适配方案
- dynamic web module和对应的TOMCAT 版本
- c#传入域名返回对应的IP
- 内存映射文件机制处理大文件
- 一些题目小结6.29