热门标签 | 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;使其再次满足“红黑树特性”。






推荐阅读
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • SQL中UPDATE SET FROM语句的使用方法及应用场景
    本文详细介绍了SQL中UPDATE SET FROM语句的使用方法,通过具体示例展示了如何利用该语句高效地更新多表关联数据。适合数据库管理员和开发人员参考。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 新冠肺炎疫情期间,各大银行积极利用手机银行平台,满足客户在金融与生活多方面的需求。线上服务不仅激活了防疫相关的民生场景,还推动了银行通过互联网思维进行获客、引流与经营。本文探讨了银行在找房、买菜、打卡、教育等领域的创新举措。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 如何在PHPCMS V9中实现多站点功能并配置独立域名与动态URL
    本文介绍如何在PHPCMS V9中创建和管理多个站点,包括配置独立域名、设置动态URL,并确保各子站能够正常运行。我们将详细讲解从新建站点到最终配置路由的每一步骤。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文将详细介绍在Windows 7环境下,检查U盘启动盘是否制作成功的多种方法,包括通过BIOS设置和使用模拟启动工具。 ... [详细]
  • 深入理解 H5C3 和 JavaScript 核心问题
    本文详细探讨了 H5C3 和 JavaScript 中的一些核心编程问题,通过实例解析和代码示例,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
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社区 版权所有