红黑树(插入)

来源:互联网 发布:vm12虚拟机安装mac os 编辑:程序博客网 时间:2024/06/15 13:13

一颗高度为h的二叉查找树的操作时间复杂度都为O(h),如果二叉树高度较高时(不平衡)时间复杂度就不是很好。红黑树是许多平衡查找树中一种,它能保证最坏情况下,基本的动态集合操作为O(logn)
1. 红黑树的性质
1)、每个节点不是红就是黑
2)、根节点是黑
3)、每个叶节点是黑
4)、如果一个节点是红,则它的2个儿子是黑
5)、对于每个节点,该节点到其子孙叶子节点的所有路径包含相同数目的黑节点。
2、红黑树的插入(较为简单)
首先默认:先插入到合适位置,赋上红色,然后进行调整!!!!!!!
第一步:插入合适位置,赋上红色。
《》第一步结束时那些性质会破坏呢? 性质1)和性质3)显然永远不会被破坏!!,因为新插入节点的子女都是哨兵。性质5)也不会被破坏,因为插入的是红节点,它的2个子女哨兵还是黑色,并不会影响黑高。唯一破坏的就是(性质2:根节点必须是黑色)和(性质4:如果一个节点是红,它的两个子女必须是黑)当破坏性质2时,把节点变为黑色。
第二步:调整
当性质4)破坏时,需要调整。性质4)破坏即插入节点的父节点也为红色,那么需要调整。
调整一共6种情况,但是其中三种和另外三种对称。下面讲述的是z的父节点是z的祖父节点的左节点(同理右节点)
三种情况的区别在于插入节点Z的父亲的兄弟(叔叔)的颜色不同。

1、叔叔颜色为红
2、叔叔颜色是黑,且Z是右孩子
3、叔叔是黑,且Z是左孩子。
1、叔叔是红。
z无论是左孩子还是右孩子,方法都一样。。Z变成newZ后按同样方法向上迭代。因为newZ的父亲可能是红。
这里写图片描述

2、叔叔是黑,且Z是左孩子
这里写图片描述
3、叔叔是黑,且Z是右孩子
这里写图片描述

1 0
原创粉丝点击