【问题标题】:Red Black tree deletion behaviour [closed]红黑树删除行为[关闭]
【发布时间】:2020-12-03 08:27:44
【问题描述】:

我有一棵红黑树如下:

                8B
           /          \
         4R           10B
       /    \        /    \
    2B        6B   9B     11B       
  /   \      /  \
1B    3B    5B   7B

我要删除 10. 会发生什么?

【问题讨论】:

  • 顺便说一句,算法与语言无关;它们可以用任何语言实现。删除语言标签。
  • 您可能想查看平衡二叉树的操作。

标签: algorithm tree red-black-tree


【解决方案1】:

要删除“10”,您需要与按顺序的前任或按顺序的后继交换值(即,对于 10,9 或 11),然后将该节点删除(可以通过交换值或交换节点的树位置来完成)

例如,假设您交换 9 和 10,一旦这样做,您会将兄弟姐妹着色为红色(因为两个侄子都是黑色),然后将父节点设为工作节点。然后,您的树将是(并且对于任何不良的树格式感到抱歉,我是盲人,因此很难确保事情正确排列),也忽略树顺序被违反的事实,稍后将修复:

        8b
   4r      11b*
 2b  6b  9r    10b
1 3 5 7

兄弟节点 (6) 是红色的,因此交换兄弟节点和父节点的颜色,然后旋转以使父节点现在是前兄弟节点的子节点:

        4b
   2b        8r
1b  3b  6b    11b*
      5b  7b 9r   10b

两个侄子节点(6 的子节点)都是黑色的,因此将兄弟节点着色为红色,并且由于父节点是红色,因此它将被着色为黑色:

        4b
   2b        8b
1b  3b  6r    11b*
      5b  7b 9b   10b

现在从树中删除 10 并且重新平衡已完成: 4b 2b 8b 1b 3b 6r 11b 5b 7b 9r

【讨论】:

  • 不知道第一个图应该如何连接,我试试看:2b-left-1, 2b-right-3 然后 6b-left-5, 6b-right -7 - 这就是我编辑它的方式。希望这是你想要的。
猜你喜欢
  • 2019-05-08
  • 2011-08-23
  • 2016-08-03
  • 2021-01-03
  • 2021-10-17
  • 2014-07-05
  • 1970-01-01
  • 2012-11-21
相关资源
最近更新 更多