红黑树
1.它是一种变形的avl平衡树
2.它的性能很好,在最坏情况下为O(lgn),只和树高有关系。
3.记住它的那5条性质,是很有帮助的。
第一个概念---旋转:
这个是理解调整红黑树的基础,我就具体说一下我的理解:
1.首先你找到要旋转的y的位置
2.令x的右孩子指向y的左孩子
3.y的左孩子找到x为他们的父亲
4.用y代替以前x的位置,以前是左孩子现在y就是左孩子,右孩子就是右孩子
5.y的左孩子找到了x
6.x的父亲就是y
第二个概念——插入
1.插入和以前的二叉树一样,只是加了一种颜色
2.这个颜色为红色,因为黑色违法性质5
3.最后调整这个红色的节点,满足红黑树性质。
插入就不想写了,如何调整???
3种情况!!!!!!!!!!!!!!
1.有一个点我们认为叫z,它的叔叔是红色
那么爸爸和叔叔,和爷爷换颜色,而自己现在变到了爷爷的位置,记住啊,叔叔红色
2.这个时候叔叔是黑色,而且自己是右孩子
不要怕,左旋转一下就变成情况3
3.这个就是叔叔黑色,二自己是左孩子
现在自己和爸爸都是红色,而爷爷是黑色,明显的,让爸爸旋转上去,爸爸和爷爷换颜色就好了
第三个概念——删除
删除和前面的二叉树一样,假如删除的是红色的点,没关系,假如是黑色的,需要调整
如何调整?
4种情况!!!!!!!!!!!!!1
1.有一个点我们叫它为x,而它的兄弟是红色的
那你就叫他们的爸爸和它的兄弟,旋转+换颜色。
2.它的兄弟是黑色+兄弟有2个孩子都是黑色
你让你兄弟换成红色就好
3.兄弟黑色+兄弟左孩子红+右孩子黑
叫你兄弟和它的左孩子,旋转+换色
4.兄弟黑色+兄弟右孩子红色
让你兄弟和你爸爸和它的右孩子,旋转+换色
好了,我想说具体的实现是相当的麻烦,你不写个十遍八遍的,你都不知道在弄什么,但你认真看我写的,你一定弄清楚了,这个过程在干什么
别的不说,起码你会调整了。
最后记住,插入是和叔叔结点有关,二删除是和你兄弟有关。