一. 红黑树规则
对于红黑树,举行变色+旋转处置惩罚,终究都是为了维持颜色+以下几条规则,只有颜色和规则维持住了,红黑树就维持住了最长路径的长度不高出最短路径的两倍。
规则:
- 根是黑的。
- 没有一连的红节点。
- 每条路径的黑色数量相称。
二. 环境一叔叔存在且为红
留意点:红黑树插入的节点都是红色的,因为在红黑树中动黑色节点是非常忌讳的,因为要维持每条路径黑色数量相称非常困难,所以插入的节点默认都是红色的。
当插入红色节点后:1.如果父亲为黑或者父亲不存在,结束,不须要任何处置惩罚。
2. 如果父亲存在且为红,由于插入节点为红,存在一连红节点,须要处置惩罚,可以肯定的是爷爷肯定是黑,因为插入节点前就是一棵红黑树了,既然父亲和爷爷颜色确定,重要看叔叔。
1.叔叔存在且为红
环境二.变色+旋旋
叔叔存在且为黑或者叔叔不存在都需变色+旋转,关键分析是左单旋,右单旋,照旧左右双旋,照旧右左双旋只要旋转后,就均衡了,直接结束,不须要向上更新
1. 变色+单旋
对于叔叔存在且为黑或不存在这种环境,不大概是因为直接插入红色节点导致一连红这种环境直接发生的,因为这发生了,原本就不是红黑树,肯定是由上述图一第一种环境处置惩罚更新上来导致的。
办理办法:curp->left, pg->left 左左右单旋g点+
p变黑,g变红。
同理:如果上述环境curp->right, pg->right,右右左单旋g点+p变黑,g变红
2.变色+双旋
对于这种环境:curp->right, pg->left,左右双旋,
将p左旋,g右旋,+ cur变黑+g变红。
同理:curp->left, pg->right, 右左双旋,将p右旋,g左旋,+cur变黑+g变红
总结单纯变色处置惩罚,须要不停向上更新至父亲不存在或者父亲为黑结束,旋转+变色处置惩罚完就均衡了直接结束。
一下是代码实现
无论怎么方式处置惩罚完都须要包管根是黑的,最后加上
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |