问题描述
我有一棵红黑树,如下:
8B
/ \
4R 10B
/ \ / \
2B 6B 9B 11B
/ \ / \
1B 3B 5B 7B
我想删除10.会发生什么?
解决方法
要删除“ 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