您的位置:首页 > 其它

算法导论—红黑树

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、红黑树练习




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: