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

12.15_黑马数据结构与算法笔记Java_第1张图片

12.15_黑马数据结构与算法笔记Java_第2张图片

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

145 avl树 put

12.15_黑马数据结构与算法笔记Java_第3张图片

12.15_黑马数据结构与算法笔记Java_第4张图片

12.15_黑马数据结构与算法笔记Java_第5张图片

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

146 avl树 remove

12.15_黑马数据结构与算法笔记Java_第6张图片

12.15_黑马数据结构与算法笔记Java_第7张图片

12.15_黑马数据结构与算法笔记Java_第8张图片

147 红黑树 概述

12.15_黑马数据结构与算法笔记Java_第9张图片

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

12.15_黑马数据结构与算法笔记Java_第10张图片

12.15_黑马数据结构与算法笔记Java_第11张图片

小妙招:

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

12.15_黑马数据结构与算法笔记Java_第12张图片

12.15_黑马数据结构与算法笔记Java_第13张图片

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

12.15_黑马数据结构与算法笔记Java_第14张图片

12.15_黑马数据结构与算法笔记Java_第15张图片

 12.15_黑马数据结构与算法笔记Java_第16张图片

12.15_黑马数据结构与算法笔记Java_第17张图片

12.15_黑马数据结构与算法笔记Java_第18张图片

148 红黑树 put case1-3

12.15_黑马数据结构与算法笔记Java_第19张图片

12.15_黑马数据结构与算法笔记Java_第20张图片

12.15_黑马数据结构与算法笔记Java_第21张图片

12.15_黑马数据结构与算法笔记Java_第22张图片

12.15_黑马数据结构与算法笔记Java_第23张图片

12.15_黑马数据结构与算法笔记Java_第24张图片

149 红黑树 put case4

12.15_黑马数据结构与算法笔记Java_第25张图片

12.15_黑马数据结构与算法笔记Java_第26张图片

150 红黑树 remove case0-1

准备工作:

12.15_黑马数据结构与算法笔记Java_第27张图片

12.15_黑马数据结构与算法笔记Java_第28张图片

12.15_黑马数据结构与算法笔记Java_第29张图片

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

12.15_黑马数据结构与算法笔记Java_第30张图片

删除的是两个孩子

12.15_黑马数据结构与算法笔记Java_第31张图片

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

12.15_黑马数据结构与算法笔记Java_第32张图片

12.15_黑马数据结构与算法笔记Java_第33张图片

151 红黑树 remove case2

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

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

12.15_黑马数据结构与算法笔记Java_第34张图片

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

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

12.15_黑马数据结构与算法笔记Java_第35张图片

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

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

 

152 红黑树 remove case3

12.15_黑马数据结构与算法笔记Java_第36张图片

12.15_黑马数据结构与算法笔记Java_第37张图片

 

12.15_黑马数据结构与算法笔记Java_第38张图片

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

153 红黑树 remove case4

12.15_黑马数据结构与算法笔记Java_第39张图片

几个例子

12.15_黑马数据结构与算法笔记Java_第40张图片

12.15_黑马数据结构与算法笔记Java_第41张图片

12.15_黑马数据结构与算法笔记Java_第42张图片

12.15_黑马数据结构与算法笔记Java_第43张图片

 

154 红黑树 remove case5

12.15_黑马数据结构与算法笔记Java_第44张图片

12.15_黑马数据结构与算法笔记Java_第45张图片

12.15_黑马数据结构与算法笔记Java_第46张图片

12.15_黑马数据结构与算法笔记Java_第47张图片

12.15_黑马数据结构与算法笔记Java_第48张图片

155 红黑树 remove 演示

156 B树 历史

12.15_黑马数据结构与算法笔记Java_第49张图片

157 B树 特性

12.15_黑马数据结构与算法笔记Java_第50张图片

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

12.15_黑马数据结构与算法笔记Java_第51张图片

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

158 B树 节点类1

12.15_黑马数据结构与算法笔记Java_第52张图片

159 B树 节点类2

怎么去看红色框框?

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

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

12.15_黑马数据结构与算法笔记Java_第53张图片

12.15_黑马数据结构与算法笔记Java_第54张图片

12.15_黑马数据结构与算法笔记Java_第55张图片

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

12.15_黑马数据结构与算法笔记Java_第56张图片

160 B树 contains

12.15_黑马数据结构与算法笔记Java_第57张图片

为什么在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个子节点。

12.15_黑马数据结构与算法笔记Java_第58张图片

root就是一个普通的节点 

161 B树 put

12.15_黑马数据结构与算法笔记Java_第59张图片

162 B树 split 分析

12.15_黑马数据结构与算法笔记Java_第60张图片

12.15_黑马数据结构与算法笔记Java_第61张图片

再举一个例子:

12.15_黑马数据结构与算法笔记Java_第62张图片

12.15_黑马数据结构与算法笔记Java_第63张图片

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:在那行,你是第几个。

12.15_黑马数据结构与算法笔记Java_第64张图片

164 B树 split 非叶子和根

12.15_黑马数据结构与算法笔记Java_第65张图片

12.15_黑马数据结构与算法笔记Java_第66张图片 12.15_黑马数据结构与算法笔记Java_第67张图片

12.15_黑马数据结构与算法笔记Java_第68张图片

第二种情况:根节点

12.15_黑马数据结构与算法笔记Java_第69张图片

12.15_黑马数据结构与算法笔记Java_第70张图片

12.15_黑马数据结构与算法笔记Java_第71张图片

165 B树 split 测试

两种测试方式:

1.debug

2.

12.15_黑马数据结构与算法笔记Java_第72张图片

166  B树 put结合split

12.15_黑马数据结构与算法笔记Java_第73张图片

你可能感兴趣的:(笔记,java,leetcode,后端,b树,算法,动态规划)