红黑树删除
来源:互联网 发布:虚拟机安装教程mac 编辑:程序博客网 时间:2024/05/22 05:08
红黑树是一种特殊的二叉查找树,其删除结点首先要按二叉查找树删除结点的算法进行
一、普通二叉查找树删除一个结点:
(1)待删除结点没有子结点,即它是一个叶子结点,此时直接删除
(2)待删除结点只有一个子结点,则可以直接删除;如果待删除结点是根结点,则它的子结点变为根结点;如果待删除结点不是根结点,则用它的子结点替代它的位置。
(3)待删除结点有两个子结点,首先找出该结点的后继结点(即右子树中数值最小的那个结点),然后将两个结点进行值交换(即:只交换两个结点的数值,不改变结点的颜色)并将待删除结点删除,由于后继结点不可能有左子结点,对调后的待删除结点也不会有左子结点,因此要把它删除的操作会落入情况(1)或情况(2)中。
二、.红黑树的删除结点算法
1.待删除结点有两个外部结点,操作如下:
(1)直接把该结点调整为叶结点
(2)若该结点是红色,则可直接删除,不影响红黑树的性质,算法结束
(3)若该结点是黑色,则删除后红黑树不平衡。此时要进行“双黑”操作
记该结点为V,则删除了V后,从根结点到V的所有子孙叶结点的路径将会比树中其他的从根结点到叶结点的路径拥有更少的黑色结点, 破坏了红黑树性质4。此时,用“双黑”结点来表示从根结点到这个“双黑”结点的所有子孙叶结点的路径上都缺少一个黑色结点。
双黑含义:该结点需要代表两个黑色结点,才能维持树的平衡
图1
如图1,要删除结点90,则删除后从根结点到结点90的所有子树结点的路径上的黑色结点比从根点到叶结点的路径上的黑结点少。因而,删除结点90后,用子结点NULL代替90结点,并置为“双黑”结点。
2. 待删除结点有一个外部结点,操作为:
该节点是黑色,其非空子节点为红色 ;则将其子节点提升到该结点位置,颜色变黑
3.“双黑”结点的处理
分三种情况:(1)双黑色结点的兄弟结点是黑色,且子结点有红色结点
(2)双黑结点的兄弟结点是黑色,且有两个黑色结点
图14
此时为双黑处理第二种情况,处理后,如图15
图19
9.删除结点4
结点4有两个非空子树,与其后继结点5交换;后继结点为黑色,删除4后,出现双黑,此时为双黑处理第二种情况,处理后如图20图22
12.删除结点5
结点5有两个子结点,与其后继结点6交换;交换后,结点5只有一个非空子结点,属于第二种情况,直接删除,将非空子结点着黑色,如图23
图23
13.删除结点14
结点14有两个子树,与其后继结点16交换;后继结点为红色,交换后14 为红色,直接删除。
14.删除结点13
结点13为叶子结点,且为黑色,删除后出现“双黑”,属于双黑处理的第二种情况,处理后如图24
图24
15.删除结点10
结点10为根结点,与其后继16值交换;交换后10只有一个非空子结点,直接将10删除,将非空子结点着为黑色
16.删除结点16
结点16为根结点,与后继结点17值交换;交换后16为叶子结点,且为黑色,删除后出现双黑,属于双黑处理的第三种情况,处理后如图25
图25
17.删除结点6
结点6为根结点,与后继结点8值交换;交换后,结点6为红色,直接删除
18.删除结点3
结点3为叶子结点,且为黑色,删除后出现“双黑”,属于双黑处理的第二种情况
剩余8,17可类似删除
- 红黑树删除
- 红黑树 --删除
- 红黑树删除
- 红黑树 删除
- 红黑树删除
- 红黑树删除
- 红黑树的删除
- 红黑树(二)删除
- 红黑树插入删除归类
- 红黑树-插入删除
- 红黑树的删除
- 红黑树(删除)
- 红黑树(删除操作)
- 红黑树的删除
- 红黑树的删除
- 红黑树之删除操作
- 红黑树 节点的删除
- 红黑树删除的实现
- 【C语言】文件指针与文件位置指针,位置指针相关操作库函数
- java海量数据导出xls分页解决报内存溢出问题
- 如何在SQL Server实现类似RowNum伪列
- iOS支付宝集成详细流程
- HDU 1011 Starship Troopers 树形背包
- 红黑树删除
- 使用ProguardGUI.jar 混淆Jar包
- Android CircleImageView圆形ImageView
- MySql 索引
- OC中的KVC和KVO
- eclipse中全局替换
- 欧拉图
- 小米运维—互联网企业级监控系统实践
- bzoj1082[SCOI2005]栅栏