红黑树与二叉树的区别_红黑树与二叉树的区别是什么

红黑树与二叉树的区别_红黑树与二叉树的区别是什么Linux内核-AVL树(平衡二叉树)与红黑树(RBTree)的对比(一)简介1. AVL树:一棵AVL树或者是空树,或者是具有下列性质的二叉查找树——它的左子树和右子树都是AVL树,且左子树和右子树的高度之差的绝对值不超过1。e.g.高度不

Linux内核-AVL树(平衡二叉树)与红黑树(RBTree)的对比
  (一)简介

  1. AVL树:一棵AVL树或者是空树,或者是具有下列性质的二叉查找树——它的左子树和右子树都是AVL树,且左子树和右子树的高度之差的绝对值不超过1。

  e.g.红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么

  高度不平衡的二叉排序树 高度平衡的二叉查找树(AVL树)

  2. 红黑树是一种二叉树,同时它还满足下列5个特性:每个结点是红色或者黑色的。根结点是黑色的。每个空结点(NULL/NIL)是黑色的。(这里将空结点作为一个特殊的结点对待,设定他们必须是黑色的。)如果一个结点是红色的,则它的左右子结点都必须是黑色的。(但黑色结点的子结点可以是黑色的。)对任意一个结点来说,从它到空结点的所有路径必须包含相同数目的黑色结点

  e.g.红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么

  3. 和红黑树相比,AVL树是严格的平衡二叉树,平衡条件必须满足(所有节点的左右子树高度差不超过1)。通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保没有一条路径会比其它路径长出两倍,因此,红黑树是一种弱平衡二叉树(由于是弱平衡,可以看到,在相同的节点情况下,AVL树的高度低于红黑树)。

  (二)旋转

  AVL树和红黑树的插入和删除操作都需要通过树的旋转来维持平衡。树的左旋和右旋的过程用一个图来直观地表示:红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么

  (三)AVL树插入结点之后的调整

  从最底层的违反平衡条件的结点以下的三个结点开始,

  1. 单旋:如果这三个结点连成一条直线,则直接旋转即可。旋转规则如下:直线方向为“左下——右上”,则右旋;直线方向为“左上——右下”,则左旋。

  2. 双旋:如果是形成一个转角,则需先旋转成直线,再按照单旋的情形旋转。

  e.g. 输入关键字序列为 { 16, 3, 7, 11, 9, 26, 18, 14, 15 },插入和调整过程如下:

  红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么

  (四)红黑树插入结点之后的调整

  为新加入的结点N赋予红色(如果赋予黑色则一定会违反红黑树的条件5,而赋予红色则只有在父结点或子结点为红色的时候才会违反红黑树的条件4,调整的概率比前者小)。

  1. 情形一:N节点的父节点P以及P的兄弟节点都是红色,而它的祖父节点G为黑色。

  P(红变黑)、G(黑变红)、U(红变黑)红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么

  2. 情形二:N节点的父节点P是红色,但是它的祖父节点G和它父节点的兄弟节点U为黑色。

  (1)先左旋:红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么

  (2)再右旋:P(红变黑)、G(黑变红)红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么

  (五)红黑树删除结点之后的结点继承

  1. 待删除节点没有子节点,则直接删除该节点。

  2. 待删除节点只有一个子节点,则用该子节点替换它的父节点。红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么

  3. 待删除节点有两个子节点,则取它的后继节点替换它,并删除这个后继节点原来的位置。它可能有两种情况:

  红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么

  不过不难发现,其实质就是使用中序遍历的后继结点来继承被删除的结点,而且该后继结点最多只有一个子结点,可以理解为将后继结点的值复制到被删除结点的位置,然后再删除该后继结点,也就是转换成了上面的第2种类型。

  (六)红黑树删除结点之后的调整

  仅仅依靠节点继承得到的红黑树可能是不平衡的,需要进一步调整。而且由(五)可知,删除结点有两个子结点的情况都可以转换成删除结点只有一个子结点的情况,所以下面我们只需讨论删除结点只有一个子结点的情况。

  假设删除的结点是红色的,那其子结点一定是黑色的,直接继承即可,无需赘言。

  假设删除的结点是黑色的,现在又面临着两种情况:如果子结点是红色的,则可以使它变成黑色然后直接继承;如果子结点是黑色的,继承之后则依然会破坏条件5,需要进一步调整使得继承结点所在的子树黑色结点数+1或者其兄弟结点(实际上是被删除结点的兄弟)所在的子树黑色结点数-1。所以下面我们可以将讨论的范围缩小为:删除结点只有一个子结点且该子结点为黑色的情况。

  记代替删除结点的子结点为N,N的新的父结点为P,N的兄弟结点为S, S的左孩子为L,S的右孩子为R。

  下面可以分5种情况进行讨论:

  1. 情形一:P是红色的,S和S的两个子结点L、R都是黑色的。

  P(红变黑)、S(黑变红)红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么

  2. 情形二:P的颜色无关(don't care),S和它的左子结点L是黑色的,S的右子结点R是红色的。

  先左旋,然后S(变成P的颜色)、P(变黑)、R(红变黑)红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么

  3. 情形三:P的颜色无关(don't care),S和它的右子结点R是黑色的,S的左子结点L是红色的。

  直接右旋,就可以转换为情形二。

  红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么

  4. 情形四:P是黑色的,S是红色的,那么自然S的两个子结点L、R都是黑色的。

  先左旋,P(黑变红),S(红变黑)

  红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么

  5. 情形五:P、S、L、R都是黑色的。

  S(黑变红)红黑树与二叉树的区别_红黑树与二叉树的区别是什么红黑树与二叉树的区别_红黑树与二叉树的区别是什么

  (七)应用

  1,广泛用于C ++的STL中,地图和集都是用红黑树实现的;

  2,着名的Linux的的进程调度完全公平调度程序,用红黑树管理进程控制块,进程的虚拟内存区域都存储在一颗红黑树上,每个虚拟地址区域都对应红黑树的一个节点,左指针指向相邻的地址虚拟存储区域,右指针指向相邻的高地址虚拟地址空间;

  3,IO多路复用的epoll的的的实现采用红黑树组织管理的的的sockfd,以支持快速的增删改查;

  4,Nginx的的的中用红黑树管理定时器,因为红黑树是有序的,可以很快的得到距离当前最小的定时器;

  5,Java的的的中TreeMap中的中的实现;

  (八)总结

  AVL树适合用于插入与删除次数比较少,但查找多的情况;相对于要求严格的AVL树来说,红黑树的旋转次数少,所以对于搜索、插入、删除操作较多的情况下,我们就用红黑树。

  红黑树广泛应用于C++的STL中,e.g. set、multiset、map、multimap;另外,Java的TreeMap和TreeSet也是使用红黑树来实现的。

  首先恭喜您,能够认真的阅读到这里,如果对部分理解不太明白,建议先将文章收藏起来,然后对不清楚的知识点进行查阅,然后在进行阅读,相应你会有更深的认知。如果您喜欢这篇文章,就点个赞或者【我】吧!!

激活谷谷主为您准备了激活教程,为节约您的时间请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/93578.html

(0)
上一篇 2024年 5月 28日
下一篇 2024年 5月 28日

相关推荐

  • tl-sf1008+交换机设置_tlsf1008交换机设置

    tl-sf1008+交换机设置_tlsf1008交换机设置小区宽带网络典型应用*以上介绍所引用数据和产品表现为产品在特定设备特定实验环境下的表现,基于现场实际环境或设备的不同可能会有所差异,提及的技术对比均为科学原理解释,不涉及其他目的。 以上内容中所提及到的第三方产品信息例如旗舰机

    激活谷笔记 2024年 5月 22日
  • 在什么方面有相同之处英语_在什么方面有相同之处英语翻译

    在什么方面有相同之处英语_在什么方面有相同之处英语翻译他们也有很多相同之处 的翻译是:They also have many similarities 中文翻译英文意思,翻译英语翻译结果1翻译结果2翻译结果3翻译结果4翻译结果5翻译结果1.mytext’)” class=’d_copy

    激活谷笔记 2024年 6月 1日
  • linux 测试cpu性能_linux测试cpu性能的命令

    linux 测试cpu性能_linux测试cpu性能的命令linux查看cpu命令Linux查看CPU命令在Linux系统中,有多种命令可以用来查看CPU相关信息,这些命令可以帮助我们了解CPU的型号、核心数、使用率等信息。下面将介绍几个常用的命令。1. lscpulscpu命令可以显示CPU的详细信息,包括CPU型号

    2024年 5月 31日
  • word下划线______怎么打电脑ctrl+_word__________怎么打出来符号

    word下划线______怎么打电脑ctrl+_word__________怎么打出来符号Word下划线怎么打,有什么快速的方法吗?Word下划线怎么打?不同的情形,下划线打法不一样哦。第一种:最普通的方法选中需要打下划线的文本,开始字体U第二种:红头文件的下划线插入形状直线第三种:

    2024年 5月 16日
  • dbus和socket_dbus和socket差异

    dbus和socket_dbus和socket差异DBus简介DBus是一种IPC机制,由freedesktop.org项目提供,使用GPL许可证发行,用于进程间通信或进程与内核的通信。注:Linux中的IPC通信机制还包括,管道(fifo),共享内存,信号量,消息队列,Socket等。DBus进程间通信主要有三层架构:1.底层接口

    2024年 5月 26日
  • word转pdf怎么免费转_pdf转word不花钱的软件

    word转pdf怎么免费转_pdf转word不花钱的软件pdf转word免费的软件推荐!这几个一定要知道!pdf转word免费的软件推荐!pdf这个文件格式小伙伴们都不陌生吧,特别是对于职场的小伙伴们来说,日常的打印等操作,都是需要将文件转为pdf格式,才不会发生乱码的现象,不过PDF相较于word文

    2024年 5月 10日
  • vue3watch和watcheffech区别_计算属性和watch的区别

    vue3watch和watcheffech区别_计算属性和watch的区别Vue3系列——computed、watchComputed计算属性computed是依赖于使用它的数据,当数据发生变化时,自定义方法重新调用执行一次计算属性,监测的是依赖值,依赖值不变的情况下其会直接读取缓存进行复用,变化的情况下才会重新计算。其语法格式如下:<script

    2024年 5月 11日
  • Clion激活2024.1.1(CLion 2024.1最新版免费激活激活成功教程安装教程(附激活工具+激活码)-持续更新永久维护)

    Clion激活2024.1.1(CLion 2024.1最新版免费激活激活成功教程安装教程(附激活工具+激活码)-持续更新永久维护)

    2024年 6月 7日
  • nacos配置中心密码加密_nacos配置中心使用

    nacos配置中心密码加密_nacos配置中心使用Nacos 融合 Spring,成为注册配置中心Nacos 融合 Spring,成为注册配置中心本文主要面向 Spring 的使用者,通过两个示例来介绍如何使用 Nacos 来实现分布式环境下的配置管理和服务发现。关于 Nacos Spring

    激活谷笔记 2024年 5月 9日
  • c语言中函数已有主体怎么表示的_c语言中函数已有主体怎么表示的

    c语言中函数已有主体怎么表示的_c语言中函数已有主体怎么表示的C语言提示函数已有主体怎么解决如果C语言中的函数已经有主体,意味着该函数已经被定义了。如果你想对该函数进行修改或添加新的功能,可以在函数主体中进行相应的修改或添加代码。如果你只想使用该函数,可以直接在其他地方调用该函数。如果你不确定如

    激活谷笔记 2024年 5月 21日
  • 关于线程同步的问题有哪些_关于线程同步的问题有哪些呢

    关于线程同步的问题有哪些_关于线程同步的问题有哪些呢面试中关于多线程同步,你必须要思考的问题原文:http://www.java520.cn/多线程/87.htmlReentrantLock的实现网上有很多文章了,本篇文章会简单介绍下其java层实现,重点放在分析竞争锁失败后如何阻塞线程。 因篇幅有限,s

    2024年 5月 30日
  • player是什么文件_player支持的文件格式

    player是什么文件_player支持的文件格式嗨,请问有什么可以帮助你?一般情况下,用户可以通过Flash播放器或者浏览器打开swf文件,如出现文件无法打开打的情况,可以通过Flash中心解决该问题1打开Flash中心后找到“首页”中的swf文件播

    2024年 5月 31日
关注微信