算法导论—红黑树
2015-09-09 11:31
246 查看
华电北风吹
天津大学认知计算与应用重点实验室
日期:2015/9/9
红黑树是对二叉树的一种平衡扩展(节点高度差不超过2倍)。红黑树采用开放的数据扩张策略,并且对于诸如插入、查询,删除有Θ(\Theta(lg n) n)的时间复杂度,因此也是一种应用比较广泛的数据结构。
一、红黑树的节点
节点属性:关键字key,节点颜色,左孩子指针,右孩子指针,父节点指针,卫星数据。
虚拟节点—NIL:对于红黑树中所有节点如果没有父节点或者缺少某个子节点,则把对应的指针指向同一个NIL。
二、红黑树的性质
1、每个节点的颜色是红色或黑色。
2、根节点是黑色。
3、每个叶节点是黑色。
4、如果一个节点是红色的,他的两个子节点都是黑色。
5、对于红黑树中的每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同个数的黑色节点。
节点的黑高:从该节点(不包含该节点)到任意一个叶子节点的任意一条简单路径上黑色节点的个数。
三、红黑树的旋转
这里确切的说应该是二叉树的旋转。因为这个旋转是为了保持二叉搜索树的性质。旋转操作包括一对可逆的操作:左旋和右旋。
四、红黑树的插入
红黑树的插入需要解决的问题是在保持黑高不变的前提下,解决父节点和子节点红红相遇的情况(如果涉及到把根节点拉下水的话,黑高就整体加一)。
如果插入节点父节点是黑色的,则不需要任何操作,本身就满足红黑树的所有性质。若插入节点和他的父节点都是红色的,这时如果插入节点叔节点是黑色的,则进行一次旋转即可构造出一颗红黑树。因此对于其他的情况目标就是构造出这种红黑树结构。
五、红黑树的删除
红黑树的删除需要解决的问题是删除节点或者等价删除节点黑高比其他节点少1的情况(如果涉及到把根节点拉下水的话,黑高就整体减一)。。
首先,如果删除节点或等价删除节点为红色,那么只需要把当前节点颜色修改为黑色即可。如果当前节点是黑色,兄弟节点是黑色,且兄弟节点有一个红色子节点,进行一次旋转操作即可。所以目标就是把构造出这种形式。
补充:
1、采用红黑树结构的语言类型
STL: set,map
2、红黑树练习
天津大学认知计算与应用重点实验室
日期:2015/9/9
红黑树是对二叉树的一种平衡扩展(节点高度差不超过2倍)。红黑树采用开放的数据扩张策略,并且对于诸如插入、查询,删除有Θ(\Theta(lg n) n)的时间复杂度,因此也是一种应用比较广泛的数据结构。
一、红黑树的节点
节点属性:关键字key,节点颜色,左孩子指针,右孩子指针,父节点指针,卫星数据。
虚拟节点—NIL:对于红黑树中所有节点如果没有父节点或者缺少某个子节点,则把对应的指针指向同一个NIL。
二、红黑树的性质
1、每个节点的颜色是红色或黑色。
2、根节点是黑色。
3、每个叶节点是黑色。
4、如果一个节点是红色的,他的两个子节点都是黑色。
5、对于红黑树中的每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同个数的黑色节点。
节点的黑高:从该节点(不包含该节点)到任意一个叶子节点的任意一条简单路径上黑色节点的个数。
三、红黑树的旋转
这里确切的说应该是二叉树的旋转。因为这个旋转是为了保持二叉搜索树的性质。旋转操作包括一对可逆的操作:左旋和右旋。
四、红黑树的插入
红黑树的插入需要解决的问题是在保持黑高不变的前提下,解决父节点和子节点红红相遇的情况(如果涉及到把根节点拉下水的话,黑高就整体加一)。
如果插入节点父节点是黑色的,则不需要任何操作,本身就满足红黑树的所有性质。若插入节点和他的父节点都是红色的,这时如果插入节点叔节点是黑色的,则进行一次旋转即可构造出一颗红黑树。因此对于其他的情况目标就是构造出这种红黑树结构。
五、红黑树的删除
红黑树的删除需要解决的问题是删除节点或者等价删除节点黑高比其他节点少1的情况(如果涉及到把根节点拉下水的话,黑高就整体减一)。。
首先,如果删除节点或等价删除节点为红色,那么只需要把当前节点颜色修改为黑色即可。如果当前节点是黑色,兄弟节点是黑色,且兄弟节点有一个红色子节点,进行一次旋转操作即可。所以目标就是把构造出这种形式。
补充:
1、采用红黑树结构的语言类型
STL: set,map
2、红黑树练习
相关文章推荐
- 前端工程师技能之photoshop巧用(从效果图到雪碧图)4——优化篇
- DataSource , DataSink, DataSourceLoop
- Intent学习笔记
- gcc 编译多个源文件
- mysql 浅析
- 安卓面试宝典
- iPhone 6s弃用蓝宝石屏 跟风厂商要哭了
- ios- 音乐播放器(1)
- 互联网产品设计常用文档类型-BRD、MRD、PRD、FSD
- Uva 307 Sticks(IDA*)
- Matlab 生成mexwin64文件时遇到的问题
- linux 常用命令详解
- mysql存储过程出参入参,sqlserver很熟悉的一件事到mysql,捣鼓了大半天。记录一下提醒自己。勿看
- apache和tomcat有什么不同,为什么要整合apache 和tomcat?
- 获取手机所有图片
- javascript json对象与json格式字符串区别
- Linux进程理解与实践(二)僵尸&孤儿进程 和文件共享
- Hello,world!
- android 限制广播消息的接收者
- 25所”工程博士”大学