红黑树的插入 设插入序列{12,1,9,2,0,11,7,19,4,15,18,5,14,13,10,16,6,3,8,17} 假设需要新插入
结点x,将其颜色着色为红色,这不会破坏性质1,2,3
情况1 新插入的结点x是根节点,则直接着色为黑色
情况2 新插入的结点x的父节点是黑色,直接插入不同调整,满足红黑树的性质 4,5
情况3 新插入的结点x的父节点是红色的,叔结点也是红色的,破坏了性质4,进行着色处理并回溯 具体的做法是
1 一黑带俩红变为一红带俩黑
2 z=z.p.p(向上回溯的原因是在着色处理 的过程中可能破坏了性质4)
情况4 x的父红叔黑
x是父亲的右孩子,父亲是祖父的右孩子(rr),左旋处理并重新着色
x是父亲的左孩子,父亲是祖父的左孩子(ll),右旋处理并重新着色
x是父亲的右孩子,父亲是祖父的左孩子,左旋并转到(ll)
x是父亲的左孩子,父亲是祖父的右孩子,右旋并转到(rr)
满足五个性质
1 每个结点非黑即红
2 根节点是黑色的
3 每个失败节点(叶子结点都是黑色的)
4 如果一个结点是红色的,它的两个孩子都是黑色(存在)/ 不能子父都是红色
5任意结点从A往下到所有叶子结点的简单路径具有相同数量的黑色结点,其数量定义为黑高
红黑树(一种结点带颜色的AVL)
评论0
最新资源