红黑树 RBTreee
来源:互联网 发布:dubstep软件 编辑:程序博客网 时间:2024/06/04 00:22
1. 红黑树是二叉查找树.
2. 插入
要点
1. 插入新节点总是红色节点
2. 如果插入节点的父节点是黑色,RB性质不变
3. 如果插入节点的父节点是红色, 破坏了性质. 重新着色或旋转
算法
假设要插入的节点标为N,N的父节点标为P,N的祖父节点标为G,N的叔父节点标为U.
1. N = root, N->黑, over。
2. P = 黑, over。
3. P = 红 (P可能是G的左孩子,也可能是右孩子,以下只说明左孩子的情况)
3. 1 U = 红 如下变换,over.
3.2 U = 黑 N为P的右孩子,P为G的左孩子 (同理 :U = 黑 N为P的左孩子,P为G的右孩子) -> 转 3.3
3.3 U = 黑 N为P的左孩子,P为G的左孩子 (同理 :U = 黑 N为P的右孩子,P为G的右孩子) over.
3. 删除
(前提:删除节点只有一个非空孩子,
如果有两个非空孩子,用此节点前驱(或后继)的值替换此节点的值,注意只是值,此节点和此节点的前驱(或后继)的颜色维持不变。)
要点
如果删除节点有非空孩子,用此孩子替换掉删除节点。注意是整个节点替换,包括颜色。
如果删除节点没有非空孩子,用任一叶子节点替换。(叶子永远是黑色).
1. 如果删除节是黑色, RB性质不变
2. 如果删除节是红色, 破坏了性质. 重新着色或旋转
算法
假设N为删除节点(d)的孩子,N的父节点为P,N的祖父节点标为G,S为N的兄弟节点,SL,SR分别为S的左右子节点.
1. d = 红, 删除,over。
2. N =红 ,d=黑,设置N=红,除了N变为root。over。
3. 1 P黑, S, SL, SR全黑, 如下变色处理,然后以P为N转case 1
3.2 P黑, S红, SL,SR全黑, 如下旋转变色,转下面case5处理
4. P为红,S, SL,SR全黑, 如下变换, over
5. P不管为红还是黑,S为P的右孩子,S黑, SL红,SR黑, 如下旋转变色,转下case
6. 如下,over
- 红黑树 RBTreee
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 结合业务查询-分布式
- 使用nmon工具進行Linux性能監控
- 编程式事务与声明式事务的区别
- 欢迎关注我的微信公众号
- eclipse自动生成get、set方法的文档注释
- 红黑树 RBTreee
- 909422229_Ajax中async的属性:true与false
- cocos2d::Console::listenOnTCP(int): error: undefined reference to 'bzero'
- 23.输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
- MFC 遍历菜单项 获取状态 改变状态
- dot-font: 排版对比中的七项原则
- centos 下安装lnmp环境
- 上传自己写的package到Pypi (简单好用)
- 跳到登陆页面,要求登陆成功后跳回来