12.15_黑马数据结构与算法笔记Java

目录

144 avl树 balance

145 avl树 put

146 avl树 remove

147 红黑树 概述

148 红黑树 put case1-3

149 红黑树 put case4

150 红黑树 remove case0-1

151 红黑树 remove case2

152 红黑树 remove case3

153 红黑树 remove case4

154 红黑树 remove case5

155 红黑树 remove 演示

156 B树 历史

157 B树 特性

158 B树 节点类1

159 B树 节点类2

160 B树 contains

161 B树 put

162 B树 split 分析

163 B树 split 实现

164 B树 split 非叶子和根

165 B树 split 测试

166  B树 put结合split


144 avl树 balance

 新增的时候不需要加=号,删除的时候需要。为了解决以上的例子。

145 avl树 put

昨天做了很多伪递归的演示,遂我们知道,这里return回来的东西就是doPut()这东西的返回值,这个return回来的东西要和树建立连接,因为是在node的左边进行查找,那自自然就是连接node的左手。 

146 avl树 remove

147 红黑树 概述

我们什么时候考虑null值,就是发现,有左孩子却没有右孩子的时候,要把另外一个兄弟也加进来。 

小妙招:

如果叶子节点,就是最下面的这个点如果是黑色的,一定要成对出现,如果是红色的,那一定是对的。 

parent.isLeftChild:父亲是不是爷爷的左孩子。 

 

148 红黑树 put case1-3

149 红黑树 put case4

150 红黑树 remove case0-1

准备工作:

李代桃僵方法:不改变其他东西,只改变5和6的值。这样子可以简化代码。

删除的是两个孩子

删除的是没有孩子或者一个孩子,并且删除的是根节点

151 红黑树 remove case2

删除的是没有孩子,且不是根节点的。

那就让它的父母指向null,然后设置它自己的新父母为null,有利于垃圾回收。这说明没有人引用它了,他就会自动被清理掉。

 删除的是有一个孩子的,且不是根节点的。

倒数第二行的代码,几个连等null的代码的意思是:我让要删除的元素和所有人脱掉关系,因此有助于垃圾回收。

现在要考虑平衡的问题了:

删黑色要考虑平衡问题,删红色不需要 

 

152 红黑树 remove case3

 

后面的再次递归,是将case3变成case4

153 红黑树 remove case4

几个例子

 

154 红黑树 remove case5

155 红黑树 remove 演示

156 B树 历史

157 B树 特性

4有两个孩子,也就是度为2 

关键字数就是key,可以有多个。从孩子数推导到关键字数 

158 B树 节点类1

159 B树 节点类2

怎么去看红色框框?

如图举例子,如果要查找的是18,keys【3】(20)>18,说明在第二行

如果要查找的是30,keys【5】(30)已然超过了第一行,说明在第二行

如果是非叶子的情况,则调用孩子来查找,因为比如说那个序号5,第一行是找不到序号5的,但是第二行是有序号5的。 

160 B树 contains

为什么在B树中,2倍树中节点最小度数-1等于最大key数目

在B树中,2倍树中节点的最小度数-1等于最大key数目是因为B树的定义和性质决定的。

B树是一种多路搜索树,它的每个节点可以包含多个子节点和关键字。在B树中,每个节点的关键字数量要满足一定的条件,即最小度数-1到2倍最小度数-1之间。同时,每个节点的子节点数量比关键字数量多1。

当节点的最小度数为t时,根据B树的性质,每个节点至少包含t-1个关键字和最多2t-1个关键字。而2倍树中的节点的最小度数为2t,因此最小度数-1就等于t-1,最大key数目就等于2t-1。

因此,在B树中,2倍树中节点的最小度数-1等于最大key数目是由B树的定义和性质决定的。

最小度数是啥

在B树中,最小度数是指一个节点中包含的最少子节点数。在B树中,每个节点都包含一个关键字和对应的子节点,最小度数规定了节点中子节点的最少数量。对于一个最小度数为t的B树,每个非根节点必须至少包含t个子节点,而根节点至少包含2个子节点。

root就是一个普通的节点 

161 B树 put

162 B树 split 分析

再举一个例子:

163 B树 split 实现

boolean leaf = true;right.leaf = left.leaf;什么意思?

首先,"boolean leaf = true;" 是一个声明语句,它创建了一个名为leaf的布尔变量,并将其赋值为true。这表示leaf变量是一个布尔类型的变量,它的值为true,即表示为叶子节点。

接着是"right.leaf = left.leaf;" 这是一个赋值语句,它将right节点的leaf属性设置为和left节点的leaf属性相同。这意味着right节点的leaf属性将被设置为和left节点相同的布尔值。这可能是在处理树的数据结构时,用来设置节点的属性,以便在树的遍历或搜索过程中进行判断和处理。

index:在那行,你是第几个。

164 B树 split 非叶子和根

 

第二种情况:根节点

165 B树 split 测试

两种测试方式:

1.debug

2.

166  B树 put结合split

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

问卷推广策略:如何让问卷被更多人看到

企业想要了解最新客户需求痛点、产品上新、活动营销的时候,往往会采取市场调研的方式。而做市场调研大家通常会采取问卷调查的形式,在这个网络高度发达的时代,大家每天都会被海量的信息淹没,想让自己的问卷让更多的人看到并不容易…

Java小案例-RocketMQ的11种消息类型,你知道几种?(事务消息)

前言 上一节给大家讲了Rocket的延迟消息,这一节和大家聊一下事务消息,关于延迟消息大家可以点下面这个链接直接看。 事务消息 事务消息是RocketMQ提供的一种类似X/Open XA的分布式事务功能。通过RocketMQ的事务消息,可以达到分布式事务的最…

探讨前端技术的未来:创新与适应的必要性

一、引言 2023年,IT圈似乎被一种悲观的论调所笼罩,那就是“Java 已死、前端已凉”。然而,真相是否如此呢?本文将围绕这一主题,探讨前端的现状和未来发展趋势。 二、为什么会出现“前端已死”的言论 这一言论的出现并…

蓝凌EIS智慧协同平台 SQL注入漏洞复现

0x01 产品简介 蓝凌EIS智慧协同平台是一款专为企业提供高效协同办公和团队合作的产品。该平台集成了各种协同工具和功能,旨在提升企业内部沟通、协作和信息共享的效率。 0x02 漏洞概述 由于蓝凌EIS智慧协同平台 UniformEntry.asp接口处未对用户输入的SQL语句进行…

volatile 关键字的作用(变量可见性、禁止重排序)

volatile 关键字的作用(变量可见性、禁止重排序) Java 语言提供了一种稍弱的同步机制,即 volatile 变量,用来确保将变量的更新操作通知到其他线程。volatile 变量具备两种特性,volatile 变量不会被缓存在寄存器或者对…

python和pygame实现捉小兔游戏

python和pygame实现捉小兔游戏 python和pygame实现捉小兔游戏,需要安装使用第三方库pygame,关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 下面是使用Python和Pygame创建的游戏,其中有…

仿淘宝、京东首页icons横向滑动效果

一、效果展示 淘宝&#xff1a; 京东&#xff1a; 二、话不多说&#xff0c;直接上demo 案例效果 代码 <template><div class"demo-page"><h1>滚动效果</h1><div classicons-slide-wrapper><div class"icons-container&quo…

【Java代码审计】SQL注入篇

【Java代码审计】SQL注入篇 1.Java执行SQL语句的几种方式2.Java SQL注入SQL语句参数直接动态拼接预编译依然采用拼接order by注入%和_模糊查询MyBatis中使用存在风险的语法 3.Java常规注入代码审计思路4.二次注入代码审计 1.Java执行SQL语句的几种方式 1、JDBC Statement执行S…

java综合实验-图书管理系统

二、实验项目内容&#xff08;实验题目&#xff09; 1. 使用Java编程语言进行实验。 2. 采用面向对象的思想进行系统设计。 3. 实现基本的图书管理功能&#xff0c;包括添加图书、删除图书、查询图书信息等。 4. 要求有良好的用户交互界面。 步骤参考&#xff1a; 步骤一…

ChatGPT使用:一个发包机器人的提示词

发包机器人&#xff1a; 设想&#xff1a;目前项目组有n条打包线会输出多个包&#xff0c;用户想获取最新的包是比较困难的&#xff0c;难点在于 1. 分支多&#xff1a;trunk&#xff0c;release&#xff0c;outer等&#xff0c;至少有3个分支&#xff1b; 2. 多平台&#x…

数据分析的基本步骤

了解过数据分析的概念之后&#xff0c;我们再来说下数据分析的常规步骤。 明确目标 首先我们要确定一个目标&#xff0c;即我们要从数据中得到什么。比如我们要看某个指标A随时间的变化趋势&#xff0c;以期进行简单的预测。 数据收集 当确定了目标之后&#xff0c;就有了取…

音乐制作软件Ableton Live 11 mac功能特点

Ableton Live 11 mac是一款数字音频工作站软件&#xff0c;用于音乐制作、录音、混音和现场演出是一款流行的音乐制作软件。 Ableton Live 11 mac特点和功能 Comping功能&#xff1a;Live 11增加了Comping功能&#xff0c;允许用户在不同的录音轨道上进行多次录音&#xff0c;…

前端离开后端就不能开发项目了吗?

前端离开后端就不能开发项目了吗&#xff1f; 经常在技术社区中看到后端个个都能代替前端&#xff0c;前端却代替不了后端&#xff01; 后端有多牛&#xff0c;前端有多菜&#xff01;嗯.......事实真的如此吗&#xff1f;前端一个人在没有服务器、数据库的情况下到底能不能开发…

怎么把图片转文字?这几个图片转文字方法一定要知道!

怎么把图片转文字&#xff1f;无论是从书籍、网络还是社交媒体上&#xff0c;我们经常需要从图片中提取文字来进行复制、编辑或翻译。手动操作耗时耗力&#xff0c;效率低下&#xff0c;那么怎么把图片转文字呢&#xff1f;今天我将介绍三种不同的方法来实现图片转文字。 图片转…

Python之time模块详解

python3中time模块的用法及说明 python中&#xff0c;导入time模块使用的命令是 import time 可以使用以下命令查看time模块内置的能够使用的方法&#xff1a; dir(time) 可以使用以下命令查看time模块中每个内置方法的说明&#xff1a; help(time.time_method) 比如time模块下…

elementui + vue2实现表格行的上下移动

场景&#xff1a; 如上&#xff0c;要实现表格行的上下移动 实现&#xff1a; <el-dialogappend-to-bodytitle"条件编辑":visible.sync"dialogVisible"width"60%"><el-table :data"data1" border style"width: 100%&q…

Python之random模块详解

python的random模块 random模块是python中一个生成随机数的模块。 random不是python解释器内置的模块。 导入random模块的方法是&#xff1a; import random 如果只使用random模块中的单个方法的话&#xff0c;也可以使用 from random import method_name 例如&#xff1a; …

中医处方软件西医电子处方系统,一键生成处方单可设置配方模板教程

一、前言 有的诊所是中医和西医都有&#xff0c;医师是全科医师&#xff0c;那么所使用的软件既要能开中药处方也要能开西药处方&#xff0c;而且可以通过一键生成配方&#xff0c;则可以节省很多时间。 下面就以 佳易王诊所卫生室电子处方为例说明 如上图&#xff0c;如果是…

Python Pandas 如何给DataFrame增加一行/多行 数据(第6讲)

Python Pandas 如何给DataFrame增加一行/多行 数据(第6讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

【Linux】进程周边004之进程的调度与切换(领略Linux系统进程调度算法的神奇)

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.进程切换 2.进程调度 2.…