红黑树(RBTree)之删除结点图解
2013-11-06 20:59
302 查看
红黑树(RBTree)之插入结点图解
红黑树(RBTree)之删除结点图解
通过上一篇红黑树建树过程图解,相信大家对建树的过程有一个感性的认识,这一篇文章主要是针对上一篇所提到的序列已建成的树进行一步一步的删除操作,同样在感性的认识对红黑树的删除结点的过程。
首先还是从红黑树的性质开始:
红黑树除了具有二叉搜索树的所有性质之外,还具有以下5种性质:
1. 每个节点是黑色或是红色;
2. 根节点为黑色;
3. 空节点是黑色的(包括根节点的parent以及所有叶节点left、right都为NULL);
4. 红色节点的父、左子、右子节点都是黑色;
5. 在任何一棵子树中,每一条从根节点向下走到空节点的路径上包含的黑色节点数量都相同。
删除的节点的方法与常规二叉搜索树中删除节点的方法是一样的,如果被删除的节点不是有双非空子女,则直接删除这个节点,用它的唯一子节点顶替它的位置,如果它的子节点分是空节点,那就用空节点顶替它的位置,如果它的双子全为非空,就把它的直接后继节点内容复制到它的位置,之后以同样的方式删除它的后继节点,它的后继节点不可能是双子非空,因此此传递过程最多只进行一次。
在册除节点后,原红黑树的性质可能被改变:
1.如果删除的是红色节点,那么原红黑树的性质依旧保持,此时不用做修正操作;
2.如果删除的节点是黑色节点,原红黑树的性质可能会被改变,要对其做修正操作:
a)如果删除节点不是树唯一节点,那么删除节点的那一个支的到各叶节点的黑色节点数会发生变化,此时性质5被破坏;
b)如果被删节点的唯物主唯一非空子节点是红色,而被删节点的父节点也是红色,那么性质4被破坏;
c)如果被删节点是根节点,而它的唯一非空子节点是红色,则删除后新根节点将变成红色,违背性质2。
好了,在了解了红黑树的性质以后,加上对删除结点的原理的分析与理解,下面来看看上一篇中已经建好的红黑树的删除过程吧!
图中用方框标识的表示下一个将要被删除的结点,其中有的结点经过几次变换而得到下一步的图,中间过程我已经省略,如果各位读者感兴趣的话,可以画出中间变化过程,达到熟练掌握红黑树删除的变化过程。
红黑树(RBTree)之插入结点图解
红黑树(RBTree)之删除结点图解
红黑树(RBTree)之删除结点图解
通过上一篇红黑树建树过程图解,相信大家对建树的过程有一个感性的认识,这一篇文章主要是针对上一篇所提到的序列已建成的树进行一步一步的删除操作,同样在感性的认识对红黑树的删除结点的过程。
首先还是从红黑树的性质开始:
红黑树除了具有二叉搜索树的所有性质之外,还具有以下5种性质:
1. 每个节点是黑色或是红色;
2. 根节点为黑色;
3. 空节点是黑色的(包括根节点的parent以及所有叶节点left、right都为NULL);
4. 红色节点的父、左子、右子节点都是黑色;
5. 在任何一棵子树中,每一条从根节点向下走到空节点的路径上包含的黑色节点数量都相同。
删除的节点的方法与常规二叉搜索树中删除节点的方法是一样的,如果被删除的节点不是有双非空子女,则直接删除这个节点,用它的唯一子节点顶替它的位置,如果它的子节点分是空节点,那就用空节点顶替它的位置,如果它的双子全为非空,就把它的直接后继节点内容复制到它的位置,之后以同样的方式删除它的后继节点,它的后继节点不可能是双子非空,因此此传递过程最多只进行一次。
在册除节点后,原红黑树的性质可能被改变:
1.如果删除的是红色节点,那么原红黑树的性质依旧保持,此时不用做修正操作;
2.如果删除的节点是黑色节点,原红黑树的性质可能会被改变,要对其做修正操作:
a)如果删除节点不是树唯一节点,那么删除节点的那一个支的到各叶节点的黑色节点数会发生变化,此时性质5被破坏;
b)如果被删节点的唯物主唯一非空子节点是红色,而被删节点的父节点也是红色,那么性质4被破坏;
c)如果被删节点是根节点,而它的唯一非空子节点是红色,则删除后新根节点将变成红色,违背性质2。
好了,在了解了红黑树的性质以后,加上对删除结点的原理的分析与理解,下面来看看上一篇中已经建好的红黑树的删除过程吧!
图中用方框标识的表示下一个将要被删除的结点,其中有的结点经过几次变换而得到下一步的图,中间过程我已经省略,如果各位读者感兴趣的话,可以画出中间变化过程,达到熟练掌握红黑树删除的变化过程。
红黑树(RBTree)之插入结点图解
红黑树(RBTree)之删除结点图解
相关文章推荐
- “百度与站长”更新:关于网站收录,删除,seo等
- 用vbs删除某些类型文件和磁盘空间报告的脚本
- QQ聊天记录删除了怎么恢复简单方法
- vbs删除注册表项的代码
- 迅速删除非法文件名的批处理代码
- 通过批处理实现删除运行、查找等处的历史记录的代码
- 删除文件提示文件正在被另一个人或程序使用的解决方法
- 关于.LDB文件 .ldb文件的产生 .ldb文件的删除方法
- asp 合并记录集并删除的sql语句
- SQLserver 数据库危险存储过程删除与恢复方法
- sql自增长设置与删除的深入分析
- linux oracle数据库删除操作指南
- mssql SA帐号的改名和删除
- UTF-8 编码中BOM的检测与删除
- QQ聊天记录删除了怎么恢复 详细步骤教程
- 删除及到期域名的查看(抢域名必备哦)
- 如何删除多级目录
- SQL2000中改名和删除默认sa帐号的最安全方法
- jquery 如何动态添加、删除class样式方法介绍
- 解析Oracle中多表级联删除的方法