树高的定义是啥?

Posted

技术标签:

【中文标题】树高的定义是啥?【英文标题】:What is the definition for the height of a tree?树高的定义是什么? 【发布时间】:2011-01-13 15:57:51 【问题描述】:

我似乎无法为此找到明确的答案,我正在尝试对堆做一些基本的证明,但这就是让我有点失望的原因:

空树有效吗?如果有,它的高度是多少? 我认为这将是 0。

具有单个节点的树的高度是多少? 我认为这将是 1,但我已经看到它是 0 的定义(如果是这种情况,那么我不知道如何解释一棵空树)。

【问题讨论】:

【参考方案1】:

树的高度是从树的根到其最远节点(即离根最远的叶节点)的路径长度。

只有根节点的树的高度为 0,而节点为零的树将被视为空树。一棵空树的高度为-1。请查看this。

我希望这会有所帮助。

【讨论】:

我相信这是实现中使用的约定问题。当树中有一个或多个节点时,所有正的高度值和高度值为零都会被表示,你应该有一些东西来表示一棵空树。所以公约把它定为-1。您可以将其作为任何其他负值。它作为数据结构的实际抽象的实现问题 - 树不会涵盖这些内容。 高度为 -1 的空树的约定实际上在 AVL 树中有一些实际用途,因为它简化了计算平衡因子和何时旋转子节点。这个实现在实践中展示了它:users.cis.fiu.edu/~weiss/dsaajava/code/DataStructures/…【参考方案2】:

我认为你应该看看 NIST 网站上的 Dictionary of Algorithms and Data Structures。有definition for height 表示单个节点的高度为0。

definition of a valid tree 确实包含一个空结构。该网站没有提到这种树的高度,但根据高度的定义,它也应该是0。

【讨论】:

谢谢,很高兴有一个可靠的来源可以引用(不要认为教授或同行评审会认为***是可接受的来源)。不过,它们的定义似乎有点矛盾,它们将树定义为“空(无节点)或根和零个或多个子树”。但是他们对高度的定义是根据根节点来定义的。 我认为,由于缺乏权威的引用来源,我会说一棵空树的高度未定义。这样一棵高度为 h 的完全二叉树中的节点数在 2^h 和 2^(h+1)-1 之间。如果你翻转它以根据 n 求解 h ,那么当树为空时,你最终会得到 log2(0)=undefined 。它至少给出了一个整洁的定义和很好的证明。 未定义空树的高度。树的高度是该树的根音符的高度(它是其孩子高度的最大值的一加,如果没有孩子,则为零)。空树没有根节点,所以不能说有高度。 其实newdefinition说空树的高度没有定义。 FWIW,CLR 似乎在这里遭受“对 null 的恐惧”。 Knuth 建议(尽管引用是顺便提及的)空树的高度应该为零。 NIST 跟随 CLR 的决定是不幸的。它不必要地使想要使用高度概念的代码复杂化。【参考方案3】:

我已经看到它以两种方式使用(将单个节点计为 0 或 1),但大多数来源会将仅根树定义为高度为 0 的树,并且不会考虑 0 节点树有效。

【讨论】:

【参考方案4】:

如果你的树是一个递归定义的数据结构,它可能是空的,也可能是一个带有左右子树的节点(例如搜索树或你的堆),那么自然定义就是将 0 分配给空树并且1 + 最高子树到非空树的高度。

如果您的树是图,那么自然定义是从根到叶的最长路径,因此仅根树的深度为 0。在这种情况下,您通常甚至不会考虑空树。

【讨论】:

我想指出 (a) 你显然是对的,并且 (b) NIST 和许多其他人不认为事情 (y) 我们的方式。我认为这种不幸的情况主要是由于 CLR,它患有“对 null 的恐惧”。【参考方案5】:

树的高度是其任一子节点到终端节点的最长路径的长度。

***说the height of an empty tree is -1。我不同意。一棵空树实际上只是一棵包含一个终端节点的树(一个空值或表示一棵空树的特殊值)。由于节点没有子节点,其最长路径的长度必须为empty sum = 0,而不是-1。

同样,一棵非空树有两个孩子,所以根据定义,至少有一个路径 >= 1 到一个终端节点。

我们可以这样定义我们的树:

type 'a tree =
    | Node of 'a tree * 'a * 'a tree
    | Nil

let rec height = function
    | Node(left, x, right) -> 1 + max (height left) (height right)
    | Nil -> 0

【讨论】:

“一棵空树实际上就是一棵包含一个终端节点的树。”不,甚至比那更空虚......【参考方案6】:

根据Wikipedia,只有一个节点的(子)树的高度为0。没有节点的树的高度为-1。但我认为这取决于你,你如何定义高度,你的证明应该适用于任何一个定义。

【讨论】:

【参考方案7】:

实际上,树的高度的完美定义是从根开始的 d 最长路径的叶子的 d 级别加上 1..accordin 2 这个定义 fa 树是空的,它不会有任何级别 nv 不能认为它为零,因为级别根的零..所以空树级别是-1,而不是accordin 2定义它的-1 + 1 = 0..所以空树的零sd高度...bt n很多书他们给了-1 bt没有解释给定的

【讨论】:

以上是关于树高的定义是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Variable 是啥意思?它的定义是啥?简单的,谢谢!

浅谈红黑树——java面试拦路虎

PCD是啥图片格式

市场营销中GT、MT是啥意思

cform未定义是啥意思

“常规”的技术定义是啥?