二叉查找树、平衡二叉树、红黑树到底怎么插入调整?不用旋转快速实现

news2024/10/5 18:25:03

目录

  • 时间复杂度
  • 二叉查找树
    • 二叉查找树的插入
    • 二叉查找树的删除
  • 平衡二叉树
    • 平衡二叉树的插入
    • 平衡二叉树的删除
  • 红黑树
    • 红黑树的插入
    • 红黑树的删除

时间复杂度

首先二叉查找树、平衡二叉树、红黑树的时间复杂度如下所示:
在这里插入图片描述红黑树和二叉查找树的时间复杂度是一样的,区别在于红黑树并不强制要求平衡,在调整树的过程中耗费的时间更少。

二叉查找树

二叉查找树的插入

步骤:从根节点开始,插入的值比当前节点小,往左,比当前节点大,则往右。
例子:8, 3, 1, 10, 6, 4, 7, 14, 13
在这里插入图片描述

二叉查找树的删除

步骤:

  1. 如果是叶子节点,直接删除
  2. 如果只有左子树或右子树,让后面的子树替代原来节点的位置
  3. 如果既有左子树,又有右子树:
    右子树的最左下节点替代原来的节点
    左子树的最右下节点替代原来的节点

步骤1和2都比较好理解,步骤3两种方式都可以,这么做的原因是我们想要找到的是比当前删除节点大的最小值,或者是比当前节点小的最大值,比如{1,2,3,4,5,6,7,8},要删除5,用4或者6来代替5原本的位置即可。
又由于二叉查找树的中序遍历是有序的:

(左根)根(根右)
所以根节点的左子树的最右节点、根节点的右子树的最左节点就是我们想要的4和6。
例子:
1.直接删除叶子节点
在这里插入图片描述2.只有左子树或右子树,后面的子树替代上来即可
在这里插入图片描述3.左右子树都存在:通过找到左子树的最右节点1,可以替换原来的节点3,也可以通过找到右子树的最左节点4替换原来的节点3。
在这里插入图片描述

平衡二叉树

平衡二叉树即左右子树的高度差不超过1。如果超过了,需要进行调整。

平衡二叉树的插入

步骤:

  1. 插入,按照二叉查找树的插入进行插入即可。
  2. 如果不平衡,进行调整。
    1)从最底下往上找到一棵最小的不平衡子树,找到这棵子树从根节点开始的三个节点,这三个节点应该在插入节点的路径上。
    2)对三个节点按大小重新调整。
    3)对三个节点原来的孩子,最小值节点和最大值的节点只要放回原来的位置即可,对于中间的节点,左放左,右放右。

例子:
1.不需要步骤3的情况:插入67
直接按二叉树插入只需要直接把调整的三个节点放到原来的位置。
在这里插入图片描述2.三个节点有孩子的情况:插入90

在这里插入图片描述
1)找到最小的不平衡子树,显然是以66为根节点的子树。顺着根节点找到连续的三个节点,且这三个节点在90的路径上。
2)按大小排好三个节点。也就是中间大小的是根节点,最小的放左边,最大的放右边。
3)插入到原来的位置。
4)对于它们的孩子节点:60、67、90:
60是66的孩子节点,插入原来的位置;
90是70的孩子节点,插入原来的位置;
67是68的左孩子节点,放到68的左子树:66的空闲位置(左放左)。
在这里插入图片描述3.再看一个左放左、右放右的例子。插入63。
在这里插入图片描述1)找到最小的不平衡子树,显然是以50为根节点的子树。顺着根节点找到连续的三个节点,且这三个节点在63的路径上。
2)按大小排好三个节点。也就是中间大小的是根节点,最小的放左边,最大的放右边。
3)插入到原来的位置。这里就是根节点的位置。
4)对于它们的孩子节点:26、60、67、70:
26是50的孩子节点,插入原来的位置;
70是68的孩子节点,插入原来的位置;
60是66的左孩子节点,放到66的左子树:50的空闲位置(左放左)。
67是66的右孩子节点,放到66的右子树:68的空闲位置(右放右)。
在这里插入图片描述

平衡二叉树的删除

  1. 按照二叉查找树的方法来删除,找到一个节点替换原来的节点

  2. 按照平衡二叉树的调整方法进行调整。

红黑树

二叉查找树在极度不平衡的情况下查找效率很低,红黑树是一种自平衡的二叉查找树,除了具备二叉查找树的基本特性外,还具有下列附加特性:

1.节点是红的或者黑的

2.根节点是黑的

3.叶子节点是空的黑色节点

4.如果节点是红的,它的子节点必然是黑的

5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

红黑树的插入

步骤:确定插入位置 -> 调整平衡

  1. 插入的位置为根节点,则变黑

  2. 否则插入为红色节点(为了保证黑色节点数目相同)
    1)叔叔节点为红色,上三角反色。
    如果根节点反色变成了红色,需要再让根节点变回黑色。
    再观察爷爷节点是否违反了规则,如果违反了继续按步骤调整。
    在这里插入图片描述

    2)叔叔节点为黑色,向上的三个节点重组为上三角,最顶上的节点为黑色,两个孩子节点为红色。
    重组后红色节点的孩子还是按照原来的排列,黑色的父亲节点原来的孩子:左边的孩子给父亲节点的左边,右边的孩子给父亲节点的右边(左给左,右给右)。
    例子:插入节点28
    插入节点28
    28的叔叔节点25为红色,将三角区域反色。反色后发现26违反了规则,对其进行调整。
    在这里插入图片描述
    26的叔叔节点10为黑色,从26开始找到连续的三个节点,并对其重新排序。将根节点置为黑色,两个孩子节点置为红色。
    在这里插入图片描述
    将它们的孩子节点插入原位。其中20、30下面是空的,所以它们的孩子节点10、35可以直接插入原来的位置,26的原来的孩子节点25、27不能直接放在26的下面,他的左孩子25放到他的左子树,20右孩子27放到他的右子树30(左放左,右放右)。
    在这里插入图片描述
    再以{20,10,5,30,40,57,3,2,4,35,25,18,22,23,24,19,18}这个序列构建红黑树来巩固过程:
    1.插入20和10:20为根节点,置为黑色,10为非根节点,置为红色,都没有违反红黑树规则。
    在这里插入图片描述2.插入5:出现连续的红色,对节点5调整,其叔叔节点为黑色,按方法2调整。
    在这里插入图片描述3.插入30,调整
    在这里插入图片描述4.插入40,调整
    在这里插入图片描述5.插入57,调整
    在这里插入图片描述6.插入3,不用调整
    在这里插入图片描述
    7.插入2,调整
    在这里插入图片描述
    8.插入4,调整
    在这里插入图片描述
    9.插入35、25、18都不用调整
    在这里插入图片描述10.插入22,调整
    在这里插入图片描述
    11.插入23,调整
    在这里插入图片描述12.插入24,调整。
    在这里插入图片描述
    在这里插入图片描述
    13.插入19,不用调整
    在这里插入图片描述

14.插入18,调整
在这里插入图片描述

红黑树的删除

  1. 按照二叉查找树的删除步骤进行删除
  2. 进行调整
  3. 如果删除的是红色节点,不用调整,红黑树的性质依然保留
  4. 如果删除的是黑色节点,破坏了红黑树的规则,对红黑树进行调整

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/928925.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电测知识分享——雷达行业必读热点!脉冲和跳频脉冲信号的生成与解调教程来了

按照信号分类,雷达通常有两种基本类型:连续波(CW)雷达和脉冲雷达。 连续波雷达多为小型的简易雷达。在应用中有单载频连续被和调制连续波两大类。单载频连续被雷达只能测速不能测距,广泛用于各种测速系统,比如交警的测速雷达。调…

自研软件太贵、购买成品软件太死板?不怕,我这有高招

传统IT自研软件开发,通过编程去写代码,还有数据库、API、第三方基础架构等。从而造成开发周期长、难度大,技术人员不易于开发维护,因此价格及时间成本也是相对较高。后期出现了可以直接应用的成品软件,以及现在火热的低…

GAN原理 代码解读

模型架构 代码 数据准备 import os import time import matplotlib.pyplot as plt import numpy as np import torchvision.transforms as transforms from torch.utils.data import DataLoader from torchvision import datasets import torch.nn as nn import torch# 创建文…

docker compose iceberg 快速体验

https://iceberg.apache.org/spark-quickstart/#docker-compose port:8888

回归预测 | MATLAB实现GA-APSO-IBP改进遗传-粒子群算法优化双层BP神经网络多输入单输出回归预测

回归预测 | MATLAB实现GA-APSO-IBP改进遗传-粒子群算法优化双层BP神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现GA-APSO-IBP改进遗传-粒子群算法优化双层BP神经网络多输入单输出回归预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现GA-…

DPU在东数西算背景下如何赋能下一代算力基础设施 中科驭数在未来网络发展大会论道

以ChatGPT为代表的人工智能大模型的快速发展,对网络信息技术创新发展提出了新的挑战,我国东数西算重大工程也在加速布局。以确定性网络、算力网络为代表的未来网络核心技术,正成为决定未来经济和产业发展的关键。 8月23日,第七届…

学生分班查询系统的创建与使用指南

开学季,负责分班工作的老师们又面临一个难题:如何公布分班结果?将结果放在学校官网上可能会让很多无关人员看到,而不放则会导致家长们纷纷打电话来询问。那么,有没有一种方法可以让家长们自行查看分班结果呢&#xff1…

【SLAM】光流 - LK光流 - 金字塔分层LK光流

在SLAM的视觉里程计中,比较常用的就是特征点法和直接法。而直接法中,光流则是其中的重点内容,比如LSD-SLAM中就使用到了光流的方法。本文将会就光流的理论原理、公式推导进行详细的剖析,以帮助读者深刻地理解。 光流算法 光流是关…

每日一练 | 华为认证真题练习Day103

1、网络设备发送的IPv6报文时,会首先将报文长度和NTU值进行对比,如果大于MTU值,则直接丢弃。 A. 对 B. 错 2、路由器接口输出信息如下,则此接口可以接收哪些组播地址的数据? (多选) A. FF02::…

中国储能行业研究报告,光伏和风电领域装机量迅速增长

随着科学技术的进步,储能工业对我们的生活产生了深远的影响。电池技术的突破使得手机使用寿命更长,家庭储能系统使得能源管理更加智能和高效。人们通过对于储能的需求进行不断发展增长,将目光投向更环保可持续的解决问题方案。这个行业的发展…

计算机丢失msvcp140.dll是什么意思,要怎么处理呢?

今天,我将和大家探讨一个关于计算机的问题——“计算机丢失msvcp140.dll是什么意思,要怎么处理呢?”这个问题可能会在很多使用计算机的朋友中遇到。希望通过今天的演讲,能够帮助大家解决这个困扰。 首先,我们来了解一…

DevOps中的持续测试优势和工具

持续测试 DevOps中的持续测试是一种软件测试类型,它涉及在软件开发生命周期的每个阶段测试软件。持续测试的目标是通过早期测试和经常测试来评估持续交付过程的每一步的软件质量。 DevOps中的持续测试流程涉及开发人员、DevOps、QA和操作系统等利益相关者。 持续…

CC++ 常用技巧

C 中的C C 是面向过程的是把整个大程序分为一个个的子函数;C 是面向对象的是把整个程序划分为一个个的类。C 是完全兼容C 的,C 是C 的子集,C 是C 的超集。C 又对C 做了很多补充和提升,因此使用C 会比使用纯C 更方便。混用C和C&am…

《软件开发的201个原则》阅读笔记 120-161条

目录 使用有效的测试完成度标准 原则122 达成有效的测试覆盖 原则123 不要在单元测试之前集成 原则 124 测量你的软件 原则125 分析错误的原因 对错不对人 原则127 好的管理比好的技术更重要 使用恰当的方法 原则 129 不要相信你读到的一切 原则130 理解客户的优先级 原…

千人千面的分析?SpeedBI数据可视化工具也很擅长

SpeedBI数据可视化工具可以实现千人千面的分析,通过个性化的数据展示和交互式分析功能,让每个人都可以根据自己的需求和业务背景进行数据分析和可视化。 SpeedBI数据可视化工具支持多维自助分析,可以帮助用户深入探索和分析数据。以下是Spee…

超店有数最新报告!美国TikTok小店全新洗牌?搏一把的机会到了

据传,TikTok美国市场的半闭环模式将于8月底关闭,其将在美国全力发展全闭环。也就是说,想要继续在TikTok美区卖货,必须开通TikTok小店,官方不给放外链了。 如果消息属实,全闭环模式开启,美国Tik…

抖音电商,从消费者体验中做增量

夜晚总是最容易emo,也最容易冲动的时候。 王雪临睡前刷着抖音,看到一家化妆品品牌在直播,刚好最近她想买抗老精华,点进去听主播小姐姐介绍一番后下了单。第二天早上起来犹豫要不要退货,再货比三家时,手机收…

stm32之DHT11

今天,记录一下DHT11,涉及到了单总线协议,所以先花点时间谈论一下单总线协议(DS18B20也是用的单总线)。 单总线协议 单总线技术的通信协议 可能这时序图就是个例子,ds18b20的时序图与DHT11的时序图也是不一…

服务器中了mkp勒索病毒该怎么办?勒索病毒解密,数据恢复

mkp勒索病毒算的上是一种比较常见的勒索病毒类型了。它的感染数量上也常年排在前几名的位置。所以接下来就由云天数据恢复中心的技术工程师来对mkp勒索病毒做一个分析,以及中招以后应该怎么办。 一,中了mkp勒索病毒的表现 桌面以及多个文件夹当中都有一封…

mysql基础——认识索引

一、介绍 “索引”是为了能够更快地查询数据。比如一本书的目录,就是这本书的内容的索引,读者可以通过在目录中快速查找自己想要的内容,然后根据页码去找到具体的章节。 二、优缺点 优势:以快速检索,减少I/O次数&am…