【问题标题】:Visualizing a balanced tree可视化平衡树
【发布时间】:2015-03-29 09:08:45
【问题描述】:

根据之前的 StackOverflow 答案,二叉树是平衡的,当且仅当其两个子树的高度相差不超过 1 (Complete binary tree definitions)。

这是否与说的相同:如果每个根到叶路径上的边数最多相差一个,则二叉树是平衡的?

我正在尝试想象二叉树与非二叉树的外观,并且正在努力围绕这个概念展开思考。

谢谢。

【问题讨论】:

    标签: tree binary-tree


    【解决方案1】:

    几乎,除非其中一个子树为空:

    *
     \
      *
       \
        *
    

    您引用的定义有点问题,因为空树实际上没有高度,但是如果您将空树定义为高度-1,它就可以工作。上面的树是不平衡的,因为(空)左子树的高度为 -1,而右子树的高度为 1。但是,您的定义将声明树是平衡的:只有一个从根到叶的路径,所以可以'不要与其他此类路径有任何不匹配。

    但是,平衡性仅与二元性部分相关。二进制只是意味着没有节点有两个以上的孩子。这是一个平衡的非二叉树的示例:

       *
      /|\
     * * *
    

    但是,树的数量(子节点数量的限制)会影响其平衡性。下面的树如果你声明它是二叉树是平衡的(只有两个子树,高度为 1 和 0),如果你声明它是三叉树是不平衡的(根的中间有一个子树,它是空的) :

        *
       / \
      *   *
     /
    *
    

    【讨论】:

    • 好的,谢谢!澄清一下,如果一棵树是平衡的,那么它的高度尽可能小(即你不能重新排列节点以达到更小的高度)?所以,修正我之前的定义:如果每个根到叶路径上的边数最多相差一个并且高度尽可能小,那么二叉树是平衡的?
    • 正确。但是,“尽可能小”需要根据您可以在具有给定数量和高度的树中容纳多少节点来定义,并且对于 2 以外的数量,表达式变得很棘手。所以我发现考虑树的层次更方便(层次是可能存在于距根给定距离处的所有节点),并且只允许最后一个不完整。
    • 另外,请注意,在其他情况下,可能存在不同的平衡概念。例如,在讨论平衡搜索树时,最深的叶子最多是最浅叶子的两倍就足够了。
    【解决方案2】:

    二叉树应该有最多每个节点有两个子节点。我发现了一个 site,它显示了不同的数据结构(你可以和它们一起玩,它们是动画的)。

    如果您对自平衡树感兴趣,请查看 AVL 树,您就会明白为什么二叉树会不平衡。祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多