平衡树的定义

时间:2011-11-04 20:56:18

标签: tree

我只是想知道是否有人能够为我澄清平衡树的定义。我知道“如果每棵子树都是平衡的,那么树就会平衡,而且两棵子树的高度最多相差一个。

如果这是一个愚蠢的问题我很抱歉,但是这个定义是否适用于每个节点一直到树的叶子,或者只适用于直接离开根的左右子树?我想另一种框架方式是,树的内部节点是否可能不平衡并且整个树保持平衡?

6 个答案:

答案 0 :(得分:101)

约束通常递归地应用于每个子树。也就是说,只有在以下情况下树才能平衡:

  1. 左右子树的高度最多相差一个,AND
  2. 左子树是平衡的,AND
  3. 正确的子树是平衡的
  4. 据此,下一棵树是平衡的:

         A
       /   \
      B     C  
     /     / \  
    D     E   F  
         /  
        G  
    

    下一个平衡,因为C的子树高度相差2:

         A
       /   \
      B     C   <-- difference = 2
     /     /
    D     E  
         /  
        G  
    

    也就是说,第一点的具体约束取决于树的类型。上面列出的是AVL trees的典型值。

    例如,

    Red-black trees强加了一个更柔和的约束。

答案 1 :(得分:40)

有几种方法可以定义“平衡”。主要目标是将所有节点的深度保持为O(log(n))

在我看来,您所谈论的平衡条件是 AVL树 以下是 AVL树的平衡条件的正式定义:

  

对于AVL中的任何节点,其左子树的高度与其右子树的高度相差 最多 1。

接下来的问题,什么是“身高”?

  

二叉树中节点的“ height ”是从该节点到叶子的最长路径的长度。

有一个奇怪但常见的情况:

  

人们将空树的高度定义为(-1)

例如,root的左边孩子是null

              A  (Height = 2)
           /     \
(height =-1)       B (Height = 1) <-- Unbalanced because 1-(-1)=2 >1
                    \
                     C (Height = 0)

确定另外两个例子:

是,平衡树示例:

        A (h=3)
     /     \
 B(h=1)     C (h=2)        
/          /   \
D (h=0)  E(h=0)  F (h=1)
               /
              G (h=0)

不,不是平衡树示例:

        A (h=3)
     /     \
 B(h=0)     C (h=2)        <-- Unbalanced: 2-0 =2 > 1
           /   \
        E(h=1)  F (h=0)
        /     \
      H (h=0)   G (h=0)      

答案 2 :(得分:7)

这两件事没有区别。想一想。

让我们采用一个更简单的定义,“即使数字为零,或者数字减去2,也是正数。”这是否说8即使6是偶数?或者这说8即使6,4,2和0是偶数?

没有区别。如果它说8即使6是偶数,它也说6即使4是偶数。因此它也说即使2是偶数也是4。因此它表示2即使0是偶数也是如此。所以如果它说8即使6是偶数,它(间接)说8即使6,4,2和0是偶数。

这里也是一样的。任何间接子树都可以通过一系列直接子树找到。因此,即使它只直接应用于直接子树,它仍然间接应用于所有子树(以及所有节点)。

答案 3 :(得分:3)

平衡树是一棵树,其高度为log的顺序(树中元素的数量)。

height = O(log(n))
O, as in asymptotic notation i.e. height should have same or lower asymptotic
growth rate than log(n)
n: number of elements in the tree

给定的定义&#34;树是平衡的,每个子树是平衡的,两个子树的高度最多相差一个&#34;其次是AVL树。

由于AVL树是平衡的,但并非所有平衡树都是AVL树,平衡树不能保持这个定义,内部节点可能不平衡。但是,AVL树需要平衡所有内部节点。

答案 4 :(得分:2)

平衡树的目的是以最小的遍历(最小高度)到达叶子。 树的数量是分支数减1。 平衡树可能不是二进制。

答案 5 :(得分:0)

  1. 树中节点的高度是从该节点向下到叶子的最长路径的长度,同时计算路径的起点和终点。
  2. 如果树中子节点的高度相差不超过1,则该节点是高度平衡的。
  3. 如果树的所有节点都是高度平衡的,则树是高度平衡的。