关于2-3-4树,百度百科:
http://baike.baidu.com/link?url=gHapyBG13vm25lZu41bq-L6941aGUPySt1DFImzJI_VkQ60wYD2r7zmGrjcV_rWs1bnHS8FsYEcq_FhIU_XMw_
这里主要记录自己所学的红黑树知识,教材是数据结构c++语言描述stl第2版。
红黑树它的每个结点都有颜色属性红或者黑,是2-3-4树的变形,使用不同颜色组合来描述3结点,4结点,利用改变颜色和旋转的方法来调整树的结构。
红黑树与2-3-4树结点对应关系:
2结点,普通的红黑树结点
4结点 (包含数值 A B C) 对应红黑树把中间B最为黑结点,A C作为B的左右结点,颜色为红。
3结点(A B) 则有2中可能
1) A为黑结点,B为红右结点
2) B为黑父结点,A为红左子结点
在红黑树中,通过颜色组合确定对应的2-3-4结点,如某个颜色组包含1黑父,2红子,则对应4结点。 包含1个黑父结点,1个红子结点则对应3结点。
红黑树重要性质:
1 根节点是黑色的。
2 红父结点一定没有红子结点,永远不会有两个红色结点直接相连。
3 从根节点到叶子的路径上,都有相同数量的黑结点,叫做黑色深度,体现红黑树的平衡性。
添加结点:
维护黑色深度平衡
规则如下:
1 维护根节点为黑色
2 新元素总是做为红结点插入到树中
3 如果造成2个红结点直接相连,都要在平衡树结构时进行旋转(单左旋转,双左旋转,单右旋转,双右旋转)
4 当向下遍历一个路径时,拆分任何4结点(黑父和2红结点)
拆分4结点,拆分是把黑结点上移一层,有4种情况:
颜色翻转拆分
当4-结点的父节点是黑色的时候,只用颜色翻转来拆分结点就够了。