红黑树删除行为

时间:2020-08-13 13:14:59

标签: algorithm tree red-black-tree

我有一棵红黑树,如下:

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

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

1 个答案:

答案 0 :(得分: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

相关问题