红黑树的删除_红黑树
红黑树是许多“平衡的”查找树中的一种,它能保证在最坏的情况下,基本的动态集合操作(插入和删除)的时间为O(lgh)。我们先简单叙述二叉查找树的性质。
1.1 二叉查找树
二叉查找树性质:设x为二叉树中的任一结点,那么对于x左子树中的任一结点y都有key[y]≤key[x],x右子树中的任一结点y都有key[x]≤key[y]。
设二叉树高度为h,下面是各个操作的算法时间复杂度:
静态操作:查找结点、找前驱、后继等时间为O(h)
动态操作:插入和删除结点等时间为O(h)
对于插入操作,新结点总是插入在某个叶结点位置;对于删除操作需依被删结点z的情况而定:
①z无左右孩子
②z只有一个孩子
③z的左右孩子均存在
1.2 红黑树
1.2.1红黑树的特性
红黑树首先是一棵二叉查找树,所以二叉查找树的所有性质红黑树都具有,此外还有自身五个性质:
①每个结点要么是黑色要么是红色
②树根结点的颜色为黑色
③叶结点(nil)为黑色
④如果某个结点为红色,则它的左、右孩子结点均为黑色
⑤对树中任一结点,所有从该结点出发到其叶结点的路径中均包含相同数目的黑色结点
外部结点(external node,叶节点):不包含实际关键字
内部结点(internal node):包含实际关键字
分别代表:双亲,保存的值,左孩子,右孩子,颜色。
黑高度(Black height):黑高度bh(x)表示从x结点出发(不包含x结点)到其叶结点路径上的黑色结点个数。
Thearem1:具有n个内部结点的红黑树高度最多为2lg(n+1)。
proof:设红黑树的高度为h,即要证明h≤2lg(n+1)。
一个简单的数学归纳法,直接把老师的屁屁踢图片放上了。
由该定理大致猜到,动态集合操作的插入和删除都可以在O(lgn)时间内完成。
1.2.2 红黑树的调整操作
旋转(rotate)分为两种:左旋和右旋操作。
左旋的伪码。
一个实际操作:
1.2.3 红黑树的插入操作
插入一个新结点分为二步完成:
1. 按照二叉查找树的方式插入新结点z
2. 恢复红黑树的特性
首先检查红黑树5个特性可能遭受破坏的情况,然后针对遭受破坏的特性制定具体恢复的策略。(这里是将插入点置为红色会产生下列情况,若置插入点为黑色,则性质⑤容易被破坏,所以我们置插入点为红色,这样就避免破坏性质⑤)
①每个结点要么是黑色要么是红色(未被破坏)
②树根结点的颜色为黑色(有可能被破坏,但修复很简单)
③叶结点(nil)为黑色(未被破坏)
④如果某个结点为红色,则它的左、右孩子结点均为黑色(有可能被破坏)
⑤对树中任一结点,所有从该结点出发到其叶结点的路径中均包含相同数目的黑色结点(未被破坏)
因此我们需要修复的只可能是第②和④条性质。伪码如下。
else same as那里是指镜像的情况,所有的left和right都镜像变成right和left。
该算法在每次迭代的开头保持下列三个部分的不变式:
①节点z是红色的
②如果z.p是根节点,则z.p是黑节点
③若有任何红黑树的性质被破坏,则至多只有一条性质被破坏,或者是性质2,或者是性质4。(事实上,性质2被破坏,是由于z是根节点且是红节点。如果性质4被破坏,其原因是z和z.p都是红节点。)
下面用一个例子实际操作一下这段代码,简单顺一下这个过程。
以一个实际例子来说明如何从头开始生成一棵红黑树。首先是一份小总结。
1.2.4 红黑树的删除
这东西是真的繁琐,不写了,有需要再看。还有红黑树的应用什么的,假期再补上吧。
下面是一篇写的很好的文章。
程序员吴师兄:我画了 20 张图,给女朋友讲清楚红黑树zhuanlan.zhihu.com
忘掉了,还有个需要注意的地方,写在最后。
这个图b)里注意看根节点,它有一个父节点,是个空的黑节点。
——————————————————————————————————————
下午写流,然后晚做周一要讲的数据挖掘竞赛的PPT。期末复习真的好烦啊,没时间做自己想学的东西。
红黑树的删除_红黑树相关推荐
- 红黑树+java+删除_红黑树深入剖析及Java实现
红黑树是平衡二叉查找树的一种.为了深入理解红黑树,我们需要从二叉查找树开始讲起. BST 二叉查找树(Binary Search Tree,简称BST)是一棵二叉树,它的左子节点的值比父节点的值要小, ...
- 红黑树的删除_红黑树揭秘
红黑树可能是一般数据结构书中代码逻辑最复杂的结构.多数材料都只是讲构建红黑树的步骤,并没有探究红黑树背后的思想.本文通过对红黑树背后逻辑的梳理,提供给大家一种理解红黑树的方法.首先我们先给出红黑树的定 ...
- 红黑树的删除_深入理解红黑树
前言 前面的文章已经介绍过二叉搜索树,AVL树,以及2-3Tree,今天我们再来学习一下二叉搜索树里面的大佬,它就是红黑树.红黑树(英语:Red–black tree)是一种自平衡二叉查找树,是在计算 ...
- 红黑树的删除_从红黑树的本质出发,彻底理解红黑树!
前言 早上好,我是彤哥. 上一节,我们一起从二叉树.二叉查找树.平衡树.AVL树.2-3树.2-3-4树.B树,一路讲到红黑树,最后得出红黑树的本质:红黑树就是2-3-4树,请看下图: 我们知道2-3 ...
- 红黑树的原理_红黑树插入算法实现原理分析
引言 红黑树是在实际工程中被广泛应用的一种数据结构,比如Linux中的线程调度就是使用的红黑树来管理进程控制块,而Nginx中也是使用红黑树来管理的timer,Java中的TreeMap和Tree ...
- 红黑树模拟软件_红黑树
红黑树 发布时间:2018-08-10 15:12, 浏览次数:415 一.在理解红黑树之前,先看一些二叉查找树 二叉查找树特性:左字数上所有的节点的值都小于或等于他的根节点上的值 右子树上所有节点的 ...
- 为什么红黑树查询快_红黑树为什么比二叉查找树更高效
平衡二叉查找树 什么是平衡二叉查找树 二叉树中任意一个节点的左右子树的高度相差不能大于 1,这是一种较为严格的定义,但是实际工程中使用,不会要求这么严格,只要实际的高度不比 log2(n)大很多,能达 ...
- 红黑树的优势_红黑树在不同场景的应用及其优势
红黑树(平衡的排序二叉树),满足以下性质: 1)每个结点要么是红的,要么是黑的. 2)根结点是黑的. 3)每个叶结点,即空结点(NIL)是黑的. 4)如果一个结点是红的,那么它的俩个儿子都是黑的. 5 ...
- 红黑树的删除_Python实现红黑树的删除操作
上一篇文章使用Python实现了红黑树的插入操作.参考:Python实现红黑树的插入操作本篇文章使用Python实现红黑树的删除操作.先将红黑树的5条特性列出来:1. 节点是红色或黑色.2. 根节点是 ...
最新文章
- 大班运用计算机教学案例,幼儿园大班体验课程教学案例
- react中context到底是如何传递的-源码分析
- this的用法this.name=name 这个什么意思
- cocos2d里面如何实现MVC(一)
- 勤哲linux客户端,Excel在线编辑
- 【idea】IDEA中TODO以及FIXME等关键字不高亮显示修复
- DisSent: Learning Sentence Representations from Explicit Discourse Relations
- .net 编译、反编译、查壳、脱壳、反混淆工具
- 阿坝县人民医院管理系统软件硬件配置参数
- About Face 3:交互设计精髓pdf
- wwwscan网站目录文件批量扫描工具
- EXCEL表格-绝对引用符$详解
- 简易图片打像素标签工具
- 云脉高效数字化档案管理
- electron设置淘宝镜像
- 「Deep Learning」读书分享系列
- 2023年1月12日,openKylin 0.9.5正式发布!
- Ubuntu下的图像编辑软件
- SQL Server 发展简史
- A Deep Convolutional Neural Network for segmenting and classifying epithelial and stromal regions
热门文章
- 购买MP3必备资料 各大芯片方案齐齐数
- Python 基础,不看会后悔哦!
- 我到底该信谁?另外,我发现了抢火车票的秘密
- 为什么我不看好PWA
- android studio gradle home,Android Studio3.0 Gradle 4.1配置
- linux杀死进程删除文件,linux 常用到的命令 删除 移动 复制 查询端口 杀死进程 查询进程...
- 这个方法无需旋转就可使得横轴坐标不重叠!
- 如何将 Mac 恢复还原到以前的日期
- P5713 【深基3.例5】洛谷团队系统(python3实现)
- python协程asyncio 应用_Python-如何使用asyncio同时运行多个协程?