【问题标题】:Binary Tree Height二叉树高度
【发布时间】:2009-12-23 06:53:34
【问题描述】:

我需要一个通用公式来计算二叉树的最小高度和二叉树的最大高度。 (不是二叉搜索树)

【问题讨论】:

  • 你需要更具体。

标签: binary-tree


【解决方案1】:

首先,计算机科学如何计算 树的高度,与离散数学中确定高度的方式 (图论),这可能是由于任一节点存在数据 (或顶点),而在数学中,它是一种纯理论方法。

所以也许你最好弄清楚你需要哪一个。

在离散数学中,树被归类为 m 叉树,所以 二叉树是二叉树。同样在任何给定的高度,可以有 最多 2^h = L(叶子)。这一点很重要,因为它证实了 根的高度为零,因此 2^0 = 1 叶...1 个顶点...根。

所以给定n个顶点,一棵树的高度由公式给出 n = 2^( h + 1 ) - 1

既然要找h,就得取两边的log2 公式 n = 2^( h + 1 ) - 1

对于一个完整的二叉树,最大高度是 log2(n + 1) = log2(2^(h + 1)) 这等于上限( log2( n + 1 ) - 1 ) = h

对于非满二叉树,最大高度 = ( n - 1 ) 因此,如果您有 n 个顶点,则必须减去根才能得到 最大高度,因为上面的公式 (2^h = L)

对于最小高度,根据上述规则推断。

【讨论】:

    【解决方案2】:

    N - 节点数。
    H - 二叉树的高度。

    完全二叉树:
    然后,与 H 高度 N 将介于:

    2^H <= N <= (2^(H+1) - 1)
    

    因此,解决了这个不等式;我们得到:

    H <= lg(N)  and  H >= (lg(N+1) - 1)
    

    因此我们最终得到:

    H = floor( lg(N) ) = ceil( (lg(N+1) - 1) )   //as H is integer
    

    (lg : 对数基数 2)

    二叉树(不一定完整):

    Max height = N;  
    
    Min Height = floor( lg(N) ) = ceil( (lg(N+1) - 1) )
    

    当二叉树完成时,我们得到最小高度。

    【讨论】:

      【解决方案3】:

      如果有 N 个元素,二叉树的最小高度将为 log2(N)+1。

      对于完整的二叉树,最大高度为 N/2。

      对于非满二叉树,最大高度为 N。

      【讨论】:

      • 你怎么知道树是满的还是不满的?我知道最小高度被认为是平衡树。
      • 由于一棵完整的二叉树只能包含奇数个节点,因此最大树高的公式为(N+1)/2。
      【解决方案4】:

      如果一个根可以有任意数量的叶子,最多为 2 (0,1,2),那么:

      • 最大高度为 n-1。当你的树只有一片叶子时就是这种情况。没有一个节点有多个分支。
      • 最小高度是 [log2(n)],其中 [x] 是 x 的整数部分。

      为了获得最小高度,每个根必须有尽可能多的分支。在这种情况下,您会注意到对于 n=1,height=0 ;对于 n=2 到 n=3,高度=1;对于 n=4 到 n=7,高度=2 ;对于 n=8 到 n=15、高度=3 等。

      因此,您可以注意到,对于每个 n,存在一个 p 使得:

      2^p

      【讨论】:

        【解决方案5】:

        想想树的结构可以如何改变。

        例如,如果树完全不平衡,那么这是最坏的情况——每个节点都只有一个子节点。在最好的情况下,树是完全平衡的,每个节点都有两个孩子。

        既然这听起来像是家庭作业,我就把它留在那里。

        【讨论】:

          【解决方案6】:

          最大高度为 n,最小高度(即完美二叉树)为 (log base 2(n + 1)) - 1

          【讨论】:

          • 最小高度来自公式 n=2^(h+1)-1 只需求解 h。
          【解决方案7】:

          最小高度为 h=ceiling(log(n+1)/log(2) -1) 对于任何二叉树。

          【讨论】:

            【解决方案8】:

            给定 n 个节点:

            最小高度:楼层(log2(n)) 假设您有 3 个节点:

                 root
            left/  \right
            

            floor(log2(3)) 将是 floor(1.58) == 1

                 root
              left/  \right
            left2/
            

            将是 floor(log2(4)) 将是 floor(2) == 2

            最大高度:N-1

            根->left1->left2 这里 3 个节点的高度为 2。

            【讨论】:

            • 这行不通。尝试找到最小的完整树,所有左树都只填充一个右孩子。
            • 我认为我的答案是完整的二叉树。
            【解决方案9】:

            使用n-nodes,可能的最大高度为floor(log(n)) = ceil (log(n+1))-1

            对于n-nodes,可能的最小高度是n-1

            【讨论】:

              猜你喜欢
              • 2021-09-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多