Tree 平衡树的定义

Tree 平衡树的定义,tree,Tree,我只是想知道是否有人能为我澄清平衡树的定义。我有这样一句话:“一棵树是平衡的,如果每棵树都是平衡的,而这两棵树的高度相差最多一个 如果这是一个愚蠢的问题,我很抱歉,但是这个定义是否适用于从树的叶子一直到树的每个节点,还是只适用于树的左、右两个子树?我想另一种方法是,树的内部节点是否可能不平衡,而整棵树是否保持平衡这两件事没有区别,想想看 让我们用一个更简单的定义,“一个正数是偶数,如果它是零,或者这个数减去2是偶数。”这是说8是偶数,如果6是偶数?还是说8是偶数,如果6,4,2和0是偶数 没有区

我只是想知道是否有人能为我澄清平衡树的定义。我有这样一句话:“一棵树是平衡的,如果每棵树都是平衡的,而这两棵树的高度相差最多一个


如果这是一个愚蠢的问题,我很抱歉,但是这个定义是否适用于从树的叶子一直到树的每个节点,还是只适用于树的左、右两个子树?我想另一种方法是,树的内部节点是否可能不平衡,而整棵树是否保持平衡这两件事没有区别,想想看

让我们用一个更简单的定义,“一个正数是偶数,如果它是零,或者这个数减去2是偶数。”这是说8是偶数,如果6是偶数?还是说8是偶数,如果6,4,2和0是偶数

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


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

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

  • 左子树和右子树的高度最多相差一个,并且
  • 左子树是平衡的,并且
  • 右边的子树是平衡的
  • 据此,下一棵树是平衡的:

         A
       /   \
      B     C  
     /     / \  
    D     E   F  
         /  
        G  
    
    下一个是不平衡的,因为C的子树高度相差2:

         A
       /   \
      B     C   <-- difference = 2
     /     /
    D     E  
         /  
        G  
    
    A
    /   \
    
    有几种方法可以定义“平衡”。主要目标是保持所有节点的深度
    O(log(n))

    在我看来,您所说的平衡条件是针对AVL tree
    以下是AVL树平衡条件的形式定义:

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

    下一个问题,什么是“高度”

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

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

    人们将空树的高度定义为
    (-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)      
    
    A(h=3)
    /     \
    B(h=0)C(h=2)1
    /   \
    E(h=1)F(h=0)
    /     \
    H(H=0)G(H=0)
    
    平衡树是一种高度为对数(树中元素数)的树

    给出的定义“一棵树是平衡的,每个子树是平衡的,两个子树的高度最多相差一个”,后面是AVL树


    由于AVL树是平衡的,但并非所有的平衡树都是AVL树,因此平衡树不符合此定义,其中的内部节点可能不平衡。但是,AVL树要求所有内部节点都要平衡。

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

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

  • 假设根的值是15。在右边,我有16,17,18。在左边,我有14,13,12。这是一棵平衡树吗?每个子树离节点的高度都在一以内。但是,在根下面的第一个节点到右边,它没有左子节点,但它的右子节点的高度是2。所以这个节点是不平衡的。对吗?正确。因此树是不平衡的。因此,为了使树平衡,每个节点都必须平衡。美丽-非常感谢您的帮助。@DavidSchwartz我们为什么要使用平衡树?为什么我们关心树是否平衡?这是迄今为止我所看到的最复杂的答案-对任何问题。很抱歉这么说。Just想补充一点,我们讨论的是子树的Comp.Science定义:树t的子树是一棵树,由t中的一个节点和t中的所有子树组成。对于常规数学定义(树本身就是树的子图),它不是真的。请注意,此定义允许平衡树的不平衡子树。(例如,通过将一个子树添加到D,将另一个子树添加到G来扩展上面的平衡树示例)这是有意的吗?不,不是。”对于AVL中的任何节点,其左子树的高度与其右子树的高度最多相差1。“如果你在D中添加一个子元素,那么B将不遵循上述规则。因此,树不会是BBT。你的答案非常冗长,不准确,可以说更简单。
    一棵没有叶子比其他叶子离根远得多的树。
    类似于“远得多”的语句”是不明确的。在code.Bruh中实现需要精确的定义。
    与最接近的叶节点一样靠近根节点,或者只比最远的一个节点。
    更简单。上面给出的是官方定义。可以使用递归轻松实现。
    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