热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

数据结构考研难点代码突破(树型查找红黑树(RBT)插入流程图,删除)

文章目录1.红黑树的定义和性质红黑树的插入操作流程红黑树的删除(了解)1.红黑树的定义和性质红黑树查找与删除的效率和AVL树相同。但是因为AVL树在

文章目录


  • 1. 红黑树的定义和性质
    • 红黑树的插入操作流程
    • 红黑树的删除(了解)



1. 红黑树的定义和性质

红黑树查找与删除的效率和AVL树相同。

但是因为AVL树在插入或删除节点可能破坏AVL树结构,而重新调整树的开销大。所以引出了红黑树。

红黑树的插入和删除一般无需调整树的结构,相比于AVL树的调整开销小。

所以,在以查为核心的操作下,适合使用AVL树结构;如果要频繁的插入或删除元素,更适合使用红黑树


红黑树定义:

  1. 红黑树首先是二叉排序树
  2. 红黑树的每个节点有两种颜色(红,黑色)
  3. 树的根节点是黑色的。
  4. 树的空节点都是黑色的.
  5. 不存在两个相连的红节点(红节点的父亲与孩子都是黑色的)
  6. 对于每一个节点来讲,到任意叶节点的简单路径上,黑节点个数相同

结点的黑高bh:从某结点出发(不含该结点)到达任一空叶结点的路径上黑结点总数,空节点算黑色。

红黑树性质:

  1. 从根节点到叶节点的最长路径不大于最短路径的二倍。

  2. n个节点的红黑树的高度h<2log(N&#43;1)

    红黑树高度为h&#xff0c;根节点的黑高>h/2&#xff0c;高度为h的红黑树节点最少为全是黑色的满二叉树。所以内部节点个数n>2h/2-1&#xff0c;求得h<2log(N-1)


红黑树的插入操作流程

步骤&#xff1a;

  1. 先按照搜索二叉树的插入方式进行插入新节点。

  2. 如果这个节点是根节点&#xff0c;颜色为黑色。如果节点不是根节点&#xff0c;颜色为红色。

    • 如果插入的节点破坏了红黑树的定义&#xff0c;调整时需要看新插入的节点的叔叔节点的颜色
    • 如果叔叔节点是黑色的&#xff0c;需要对红黑树进行旋转&#43;变色操作
      • 红黑树的旋转与AVL树的旋转相同&#xff08;LL&#xff0c;RR&#xff0c;RL&#xff0c;LR型旋转&#xff09;
      • LL&#xff1a;右单旋&#xff0c;父换爷&#43;变色
      • RR&#xff1a;左单旋&#xff0c;父换爷&#43;变色
      • LR&#xff1a;左右双旋&#xff0c;儿换爷&#43;变色
      • RL&#xff1a;右左双旋&#xff0c;儿换爷&#43;变色
    • 如果叔叔节点是红色的&#xff0c;需要对红黑树进行变色&#43;变新操作
      • 叔父爷换色&#xff0c;爷变为新节点

具体操作&#xff1a;

红黑树插入&#xff1a;20&#xff0c;10&#xff0c;5&#xff0c;30&#xff0c;40&#xff0c;57&#xff0c;3&#xff0c;2&#xff0c;4&#xff0c;35&#xff0c;25&#xff0c;18&#xff0c;22&#xff0c;23

在红黑树插入节点只可能破坏“不存在两个相连的红节点&#xff08;红节点的父亲与孩子都是黑色的&#xff09;这个条件”

  1. 按照搜索二叉树插入到如下图时&#xff0c;需要调整红黑树结构&#xff08;新插入节点5&#xff09;
    在这里插入图片描述
    叔叔节点是null&#xff0c;是黑色&#xff0c;插入的5属于LL型&#xff0c;需要进行右单旋操作
    在这里插入图片描述
  2. 之后插入30节点&#xff0c;又不符合红黑树的定义&#xff0c;需要进行调整
    在这里插入图片描述
    上图新插入节点的叔叔是5节点&#xff0c;是红色的。执行步骤 “叔父爷换色&#xff0c;爷变为新节点”

在这里插入图片描述
3. 插入节点40&#xff0c;破坏了红黑树的特性
在这里插入图片描述

新插入的节点的叔叔是黑色的空节点&#xff0c;插入类型是RR型

操作&#xff1a;左单旋&#xff0c;父换爷&#43;变色

在这里插入图片描述
4. 插入57&#xff0c;需要调整红黑树
在这里插入图片描述
新节点叔叔20是红色的&#xff0c;调整步骤为&#xff1a;叔父爷换色&#xff0c;爷变为新节点
在这里插入图片描述

  1. 插入3&#xff0c;2节点后&#xff0c;插入2时破坏的红黑树特性

节点2的叔叔是黑色的&#xff0c;属于LL型&#xff0c;右单旋&#xff0c;父换爷&#43;变色
在这里插入图片描述

  1. 插入4节点后&#xff0c;破坏了红黑树的特性需要进行调整

插入节点4的叔叔节点是红色的&#xff0c;叔父爷换色&#xff0c;爷变为新节点
在这里插入图片描述
7. 插入35&#xff0c;25节点不会改变红黑树特性&#xff0c;插入22节点后会改变红黑树特性

22节点叔叔节点是红色的&#xff0c;叔父爷变色后&#xff0c;爷变成新节点
在这里插入图片描述
变色后发现仍然不是红黑树&#xff0c;此时爷节点变成新节点继续调整红黑树

此时30是作为新插入节点&#xff0c;叔叔节点是红色的&#xff0c;叔父爷变色&#xff0c;爷变成新节点
在这里插入图片描述
新节点变为根节点&#xff0c;根节点变为黑色
在这里插入图片描述
8. 插入23节点&#xff0c;破坏了红黑树特性&#xff0c;叔叔节点是黑色的&#xff0c;且是LR型&#xff0c;左右双旋&#xff0c;儿换爷&#43;变色(儿爷变色)
在这里插入图片描述

红黑树的删除&#xff08;了解&#xff09;


  1. 红黑树删除操作的时间复杂度O(logN)
  2. 红黑树中删除结点的处理方式和二叉排序树的删除一样
  3. 按第二步删除结点后&#xff0c;可能破坏“红黑树特性”&#xff0c;此时需要调整结点颜色、位置&#xff0c;使其再次满足“红黑树特性”。






推荐阅读
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 关键词:塞尔达旷传说野之息、switch、cemu设置、Wii U、租赁、游戏机 ... [详细]
  • 电脑公司win7剪切板位置及使用方法
    本文介绍了电脑公司win7剪切板的位置和使用方法。剪切板一般位于c:\windows\system32目录,程序名为clipbrd.exe。通过在搜索栏中输入cmd打开命令提示符窗口,并输入clip /?即可调用剪贴板查看器。赶紧来试试看吧!更多精彩文章请关注本站。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • Excel数据处理中的七个查询匹配函数详解
    本文介绍了Excel数据处理中的七个查询匹配函数,以vlookup函数为例进行了详细讲解。通过示例和语法解释,说明了vlookup函数的用法和参数的含义,帮助读者更好地理解和运用查询匹配函数进行数据处理。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 微软发布OneNote for WordPress插件,支持一键从OneNote获取内容发布
    微软今日发布了OneNoteforWordPress插件,该插件支持从OneNote一键获取 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Pycharm编辑器取消双击shift弹出搜索框的方法
    在使用Pycharm编辑器时,双击shift会弹出搜索框界面,导致输入失去焦点,给用户带来不便。本文介绍了取消双击shift弹出搜索框的方法:在Pycharm中双击shift,输入registry并回车,找到“ide.suppress.double.click.handler”并勾选后,关闭即可解决该问题。通过这个方法,你再也不会被shift问题困扰了。 ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • d3dx9_26.dll极品飞车9修复工具下载及修复教程
    本文介绍了d3dx9_26.dll文件的修复工具下载和修复教程,解释了该dll文件的作用和安装方法,同时提供了其他dll文件下载安装的方法。文章涵盖了3d、windows、p2p、dll、visual studio等知识点,并由未来可期1212投稿。希望该技术和经验能帮到你解决dll文件相关技术问题。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
author-avatar
用途回家
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有