只有一个节点的树的高度

Posted

技术标签:

【中文标题】只有一个节点的树的高度【英文标题】:Height of a tree with only one node 【发布时间】:2010-10-31 22:19:00 【问题描述】:

根据***,

树的高度是从根到树的路径的长度 树中最深的节点。一棵只有一个节点的(有根的)树( root) 的高度为零(或一)。

我不明白 - 是零还是一(或两者兼而有之)?

【问题讨论】:

最佳答案可以在以下链接中找到:***.com/questions/2597637/… 【参考方案1】:

这只是您对二叉树高度的递归描述的假设。您可以考虑仅由一个高度为 0 或高度为 1 的节点组成的树。

如果你真的想以某种方式考虑它,你可以这样想

如果将高度视为边数,则为 0(因此单个节点没有任何边,因此为 0) 如果将高度视为节点数,则为 1(因此单个节点计为 1)

这只是为了描述最小的树有多少高度,那么在任何情况下,每当您添加一个降序节点时,您也会添加一个相关的边,因此它会相应地增加。

在***提供的示例中:

这棵树的高度可以是 4(节点)或 3(边)。这取决于您是按边数还是按节点数。

【讨论】:

哦,好的,我明白了。所以没有单独的术语来分别指代节点的高度和边缘的高度? 不,没有.. 树的高度以从根到最深节点的路径长度来衡量。路径由边和节点组成,特别是如果路径有 n 个边,那么它有 n+1 个节点(这应该很简单),这就是为什么你可以必须有不同的基本情况:仅由一个节点组成的路径有 0 个边但有 1 个节点。【参考方案2】:

使用节点计数而不是边计数的一个优点是它将空情况(零节点和节点级别)与最小情况(一个节点,并且节点级别为一)区分开来。在某些情况下,空树没有意义,但在其他情况下,空尝试将是完全合法的。

【讨论】:

【参考方案3】:

取决于约定。这里没有“正确”的答案。有人告诉我它是 1。但 0 也是正确的。

【讨论】:

【参考方案4】:

我认为,一个根节点的高度应该是 0。 这很有实际意义,因为 2^height 还为您提供了该级别的节点数。

【讨论】:

不过,人们可能会提出相反的观点。如果高度是包含定义的,则 (2^height)-1 是给定高度下树的最大大小。【参考方案5】:

假设您在节点类中以递归方式计算高度,我会这样做以返回高度而不包括根的高度(java 代码):

int height()
    int leftHeight = 0;
    int rightHeight = 0;
    if(left != null)
        leftHeight =+ left.height() + 1;
    if(right != null)
        rightHeight =+ right.height() + 1;
    return Math.max(leftHeight, rightHeight);

如果你想包括根的高度,那么我会这样做:

int height()
    int leftHeight = 0;
    int rightHeight = 0;
    if(left != null)
        leftHeight =+ left.height();
    if(right != null)
        rightHeight =+ right.height();
    return Math.max(leftHeight, rightHeight) + 1;

【讨论】:

【参考方案6】:

取决于您想如何解释树的高度。在某些应用程序中,具有一个节点的树被解释为高度为 1,而其他人则认为它的高度为零。

【讨论】:

以上是关于只有一个节点的树的高度的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 310 最小高度树(拓扑排序变形)

树的概念:层次高度深度宽度

jdk源码分析——TreeMap

AVL树

Mysql与索引有关的树的概念

树的概念与实现