红黑树的直觉

时间:2015-04-23 17:05:47

标签: algorithm binary-tree red-black-tree

我想了解红黑树是如何工作的。我理解算法,如何在插入和删除操作后修复属性,但有些事情对我来说并不清楚。为什么红黑树比二叉树更平衡?我想了解直觉,为什么旋转和固定树属性使红黑树更加平衡。

感谢。

3 个答案:

答案 0 :(得分:5)

假设您通过按顺序插入以下项目来创建纯二进制树:1,2,3,4,5,6,7,8,9。每个新项目将始终是树中最大的项目,并且所以作为最可能的节点插入。你“树”看起来像这样:

1
 \
  2
   \
    3
     .
      .
       .
        9

在红黑树(或任何类型的平衡二叉树)中执行的旋转确保任何节点的左子树和右子树都不比另一节更深(通常,高度差为0或1,但是任何常数因子都可以。)这样,运行时间取决于树的高度 h 的运算总是O(lg n),因为旋转保持h = O(lg n)的属性,而在上面显示的最坏情况h = O(n)

特别是对于红黑树,节点着色只是一个簿记技巧,有助于证明旋转始终保持h = O(lg n)。不同类型的平衡二叉树(AVL树,2-3棵树等)使用不同的簿记技术来维护相同的属性。

答案 1 :(得分:1)

  

为什么红黑树比二叉搜索树更平衡?

因为红黑树保证了O(logN)性能,可以插入,删除和查找任何操作顺序。

  

为什么旋转和固定树属性会使红黑树更加平衡?

除了任何二叉搜索树必须遵守的一般属性外,红黑树也遵循以下属性:

  1. 没有节点有两个红色链接连接到它。
  2. 从root到null链接的每条路径都有相同数量的黑色链接。
  3. 红色链接向左倾斜。
  4. 现在我们要证明以下命题:

    命题即可。在最坏的情况下,树的高度≤2lg N.

    证明即可。 由于从根到任何空链路的每条路径都具有相同数量的黑色链路,并且两条红色链路永远不会在一行中,因此在最坏的情况下,最大高度始终小于或等于2logN。

答案 2 :(得分:0)

虽然已经很晚了,但是自从我最近学习RBT以来,我一直在为为什么神奇的旋转和色彩平衡树而感到困惑,并且一直在思考与OP相同的问题

为什么旋转和固定树属性会使红黑树更加平衡

经过几天的“研究”,我得到了尤里卡的一刻,并决定将其详细写成。我不会在此处复制粘贴内容,因为某些格式设置不正确,因此任何有兴趣的人都可以从github中进行检查。我试图用很多图像和模拟来解释。希望它有一天能帮助碰巧在此线程中跳出搜索相同问题的人:)