红黑树
来源:互联网 发布:php 读取json 编辑:程序博客网 时间:2024/05/16 11:28
1. 满足下面红黑性质的二叉搜索树1、每个节点或是红的或是黑色2、根节点是黑色3、每个叶结点是黑色4、如果一个叶结点是红色,那么它的两个子节点都是黑色的5、对每个节点,从该节点到其后代叶结点的简单路径上,均包含相同数目的黑色节点。 2. 一棵有n个内部节点的红黑树的高度至多为2lg(n+1) 3. 在对红黑树进行update的时候,必须通过**旋转**改变某些节点的颜色以及指针结构以维持红黑树的性质 LEFT-ROTATE(T,x)1. y=x.right // 初始设置 y2. x.right=y.left //把y的左子树移接到x的右子树3. if y.left !=T.nil4. y.left.p = x5. y.p=x.p //把x的双亲节点链接到y6. if x.p==T.nil7. T.root=y8. elseif x==x.p.left9. x.p.left=y10. else x.p.right=y11. y.left=x //把x放到y的左子树12. x.p=y红黑树的插入RB-INSERT(T,z) 1. y=T.nil 2. x=T.root 3. while x!=T.nil 4. y=x 5. if z.key<x.key 6. x=x.left 7. else x=x.right 8. z.p=y 9. if y==T.nil 10. T.root=z 11. elseif z.key<y.key 12. y.left=z 13. else y.right=z 14. z.left=T.nil 15. z.right=T.nil 16. z.color=RED 17. RB-INSERT-FIXUP(T,z) //对节点重新进行着色和旋转RB-INSERRT-FIXUP(T,z) 1. while z.p color===RED 2. if z.p==z.p.p.left 3. y=z.p.p.right // 叔节点 4. if y.color==RED 5. z.p.color=BLACK //case 1 6. y.color=BLACK 7. z.p.p.color=RED 8. z=z.p.p 9. else if z==z.p.right 10. z=z.p 11. LEFT-ROTATE(T,z) 12. z.p.color=BLACK 13. z.p.p.color=RED 14. RIGHT-ROTATE(T,z.p.p) 15. else(same as then clause with "right" and "left" exchanged) 16.T.root.color=BLACK 插入操作总共花费O(lgn) 的时间
0 0
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 基于比较的排序,时间复杂度下界是o(nlogn)的小证明
- jsp动作命令详解
- Eclipse设置:背景与字体大小和xml文件中字体大小调整 .
- Face Time 介绍以及收费问题
- Protobuf java基础
- 红黑树
- 力所能及之Hibernate中get(),load()区别
- HTTP协议,Http协议基础概念
- Python之命令解析模块optparse
- ArcGIS Engine二次开发——计算shapefile面图层要素的面积
- SQL表连接图解
- Android 重写系统Crash处理类,保存Crash信息到SD卡 和 完美退出程序的方法
- 一道腾讯笔试题,考察对STL erase函数的运用
- Spring注解总结----@Autowired和@Qualifier、@Resource