算法导论 红黑树 节点删除
来源:互联网 发布:qq for mac怎么安装 编辑:程序博客网 时间:2024/04/27 22:25
RB-DELETE-FIXUP:
需要执行Fixup的大前提是:被删除节点y是黑节点。
先说一下删除节点时可能违背的特点。
特点一:节点或红或黑。不违背。
特点2:根节点是黑节点。当被删除的节点是黑节点,而新的根节点是红节点时,违背特点2。不过处理很简单,由于x节点是红节点,在Fixup函数中不执行while循环,直接执行最后的赋值,也就是简单地将x涂为黑。
特点3:叶节点为黑。不违背。
特点4:红节点的子节点为黑。当p[y]和x同为红节点时会违背这个特点。同特点2。
特点5:同一点不同路径黑节点数量相同。这个一定会违背,因为删除y这个黑节点到,就是少了一个黑结点。这种情况是Fixup函数主要应对的。
前四个特点已经讨论完毕,下面重点说一下第五个。对于第五个特点,由于x和p[y]同为黑节点(循环条件),删除y后,为了不违背特点5,我们可以把y的黑色属性加到y的非空子节点x,使之成为双重黑节点。这不违背特点5,但却违背了特点1。因此,最重要解决的是如何不违背特点1。采用的思想是,想办法将双重节点的颜色去掉一重,而又不违背5个特点。
算法RB-DELETE-FIXUP分4种情况:
w=brother[x]
Case1:color[w]=red
Case2:color[w]=black,color[left[x]]=black,color[right[w]]=black
Case3:color[w]=black,color[left[x]]=red,color[right[w]]=black
Case4:color[w]=black,color[left[x]]=either,color[right[w]]=red
四种情况的关系如下图。
1 2* 3 4*
Case2和4是最终步骤,所以先要将1,3转换为2或4,。还有一点要注意,就是在case2对应的图上,节点B是红节点,而算法的最后要将该节点涂为黑,这在图上没有显示。
整个算法执行过程中,依据的原则就是特点5。可以看到,在四个图所画子树的跟节点到任一外节点α,β,γ,δ,ε,ζ的黑色高度始终不变。说α,β,γ,δ,ε,ζ并不严谨,移位它们很可能是非空子树,不过道理是一样的。
- 算法导论 红黑树 节点删除
- 算法导论 红黑树加入节点
- 算法导论---红黑树删除详解
- 红黑树--删除 算法导论笔记
- 算法导论 之 红黑树 - 删除[C语言]
- 红黑树的删除(算法导论)
- 算法导论笔记:13-03红黑树删除
- 算法导论 红黑树 学习 删除(四)
- 算法导论程序32--红黑树的删除
- 学习算法导论——红黑树旋转插入和删除
- 算法导论 B树(附带节点高度)
- 二叉排序树节点的删除(C++,算法导论),前中后序遍历(递归/非递归,栈实现),按层次遍历(队列实现)
- 单链表 算法(删除中间节点)
- 算法导论-二叉树删除 前驱 后继
- 算法导论13.4删除 练习总结
- 一种新的删除红黑树节点的算法
- 算法导论 ch13 红黑树
- 算法导论 红黑树
- 指针
- asp.net下载文件的常用方法
- 新浪微博Error_code: 400; Error: 40022:Error: source paramter(appkey) is missing的解决方法
- HDDVD/Manuals
- 牧人和丢失的牛
- 算法导论 红黑树 节点删除
- exchang2010如何设置允许传输颜色分类!
- 蝮蛇和锉刀
- 如何才算掌握了java EE
- C#消息处理机制
- Flex中两个Application页面之间的传值
- 十个成功励志小故事
- Stringbuffer和StringBuilder的区别
- windows cygwin 安装NDK