首页 > 代码库 > (5) 红黑树
(5) 红黑树
红黑树本身就是一颗二叉查找树, 因此红黑树的插入操作和二叉查找树的插入操作都是一样的,这个不难.但是红黑树插入节点完成后, 可能会破坏红黑树的特性, 为了保持红黑树的性质, 需要通过一系列操作来保持红黑树的性质.
既然说会破坏红黑树的性质, 那红黑树到底有什么性质呢? 红黑树有五个性质:
性质1. 节点是红色或黑色
性质2. 根是黑色
性质3. 所有叶子都是黑色(叶子是NIL节点)
性质4. 如果一个节点是红的,则它的两个儿子都是黑的
性质5. 从任一节点到其叶子的所有简单路径都包含相同数目的黑色节点。
刚才说节点插入后, 可能会破坏红黑树的上面的性质, 为了保持红黑树的性质, 就需要进行一系列的操作.所有的插入情况可以归纳成以下几种case:
1.如果插入节点的父节点是黑色
这种情况,不用调整树结构, 不会破坏红黑树性质
2.插入节点的父节点是红色
这种情况又需要分成一下几种case讨论:
(1).叔叔节点是红色
这种情况不需要对树结构进行改变,只需要改变某些节点的颜色, 就可保持红黑树的性质
(2)叔叔节点是黑色
这种情况还需要分:
- 插入节点的父节点是左子树, 且插入节点是左节点
- 插入节点的父节点是左子树, 且插入节点是右节点
- 插入节点的父节点是右子树, 且插入节点是左节点
- 插入节点的父节点是右子树, 且插入节点是右节点
所有情况就是这些, 后面对这些情况一一进行分析.
参考链接:
http://dongxicheng.org/structure/red-black-tree/
http://blog.csdn.net/yangjun2/article/details/6542321
(5) 红黑树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。