【程序员面试必备】红黑树详细图解

红黑树简介及左旋、右旋、变色 红黑树简介及红黑树的左旋、右旋、变色 阅读详情

红黑树(Red Black Tree)是一种自平衡的二叉搜索树(Self-balancing Binary Search Tree)。以前也叫做平衡二叉 B 树(Symmetric Binary B-tree)。

 

预备知识

 

树的知识框架结构如下图所示:

 

平衡二叉搜索树

平衡二叉搜索树(Balanced Binary Search Tree),英文简称 BBST。经典常见的平衡二叉搜索树是 AVL 树和红黑树。

 

①二叉搜索树

二叉搜索树(Binary Search Tree)是二叉树的一种,英文简称 BST。又称为二叉查找树、二叉排序树。

它的特点是任何一个结点的值都大于其左子树的所有结点的值,任何一个结点的值都小于其右子树的所有结点的值。

 

②平衡

平衡(Balance):就是当结点数量固定时,左右子树的高度越接近,这棵二叉树越平衡(高度越低)。而最理想的平衡就是完全二叉树/满二叉树,高度最小的二叉树。

一棵二叉搜索树平均时间复杂度可以认为是树的高度 O(h)。像左边这棵,结点的左右子树的高度接近,属于一棵平衡二叉搜索树,O(h) = O(logn);而右边这棵,高度达到了最大,已经退化成了链表,O(h)=O(n)。

 

③改进二叉搜索树

当二叉树退化成链表时,性能是很低的,所以我们需要在结点的插入、删除操作之后,想办法让二叉搜索树恢复平衡(减小树的高度)。

但是如果为了追求最理想的平衡,而增加了时间复杂度也不是很有必要,因此比较合理的方案就是:用尽量少的调整次数达到适度平衡。

由此引申出 AVL 树的概念。

 

AVL 树

AVL 树是最早发明的自平衡二叉搜索树之一,它取名自两位发明家的名字:G.M.Adelson-Velsky 和 E.M.Landis。

 

平衡因子(Balance Factor):某结点的左右子树的高度差。

每个叶子结点的平衡因子都是 0。看这棵二叉搜索树,红色数字标注了每个结点对应的平衡因子。

举例:8 的左子树高度为 2,右子树高度为 1,因此它的平衡因子为 1;5 的左子树高度为 0,右子树高度为 3,因此它的平衡因子为 -3;4 的左子树高度为 2,右子树高度为 4,因此它的平衡因子为 -2;

 

再看这棵 AVL 树和它每个结点对应的平衡因子:

可以看到 AVL 树具有以下特点:

  • 每个结点的平衡因子只可能是 -1、0、1(如果绝对值超过 1,则认为是失衡)

  • 每个结点的左右子树高度差不超过 1

  • 搜索、插入、删除的时间复杂度是 O(logn)

 

B 树

B 树(Balanced Tree)是一种平衡的多路搜索树,多用于文件系统、数据库的实现。

 

这是一个简单的 3 阶 B 树:

特点如下:

  • 1 个结点可以存储超过 2 个元素,可以拥有超过 2 个子结点

  • 拥有二叉搜索树的一些性质

  • 平衡,每个结点的所有子树高度一致

  • 比较矮

 

①m 阶 B 树的性质(m ≥ 2)

 

m 阶 B 树指的是一个结点最多拥有 m 个子结点。假设一个结点存储的元素个数为 x,那么如果这个结点是:

  • 根结点:1 ≤ x ≤ m - 1

  • 非根结点:┌ m / 2 ┐ - 1 ≤ x ≤ m - 1

 

如果有子结点,子结点个数为 y = x + 1,那么如果这个结点是:

  • 根结点:2 ≤ y ≤ m

  • 非根结点:┌ m / 2 ┐ ≤ y ≤ m

 

向上取整(Ceiling),指的是取比自己大的最小整数,用数学符号 ┌ ┐ 表示;向下取整(Floor),指的是取比自己小的最大整数,用数学符号 └ ┘ 表示。

 

比如 m=3,子结点个数 2≤y≤3,这个 B 树可以称为(2,3)树、2-3 树。

比如 m=4,子结点个数 2≤y≤4,这个 B 树可以称为(2,4)树、2-3-4 树。

比如 m=5,子结点个数 3≤y≤4,这个 B 树可以称为(3,5)树、3-4-5 树。

以此类推。

 

②B 树 VS 二叉搜索树

 

这是一棵二叉搜索树,通过某些父子结点合并,恰好能与上面的 B 树对应。

 

我们可以得到结论:

  • B 树和二叉搜索树,在逻辑上是等价的

  • 多代结点合并,可以获得一个超级结点,且 n 代合并的超级结点,最多拥有 (2^n) 个子结点 (至少是 (2^n) 阶 B 树)

 

红黑树定义和性质

 

红黑树是一种含有红黑结点并能自平衡的二叉搜索树。

 

为了保证平衡,红黑树必须满足以下性质:

  • 每个结点是要么是红色或黑色

  • 根结点必须是黑色

  • 叶结点(外部结点、空结点)是黑色

  • 红色结点不能连续(也就是,红色结点的孩子和父亲都是黑色)

  • 对于每个结点,从该点至 nil(树尾端,Java 中为 null 的结点)的任何路径都包含所相同个数的黑色结点

 

红黑树与 B 树的等价变换

根据上面的性质,可以画出这样一棵红黑树。接下来对红黑树做等价变换,即将所有的红色结点上升一层与它的父结点放在同一行,这就很像一棵 4 阶 B 树,转换效果如下图所示。

可以得出结论:

  • 红黑树与 4 阶 B 树(2-3-4树)具有等价性

  • 黑色结点与红色子结点融合在一起,形成 1 个 B 树结点

  • 红黑树的黑色结点个数与 4 阶 B 树的结点总个数相等

 

红黑树的基本操作

 

当我们对一棵平衡二叉搜索树进行插入、删除的时候,很可能会让这棵树变得失衡(最坏可能导致所有祖先结点失衡,但是父结点和非祖先结点都不可能失衡)。

 

为了达到平衡,需要对树进行旋转。而红黑树能够达到自平衡,靠的也就是左旋、右旋和变色。

旋转操作是局部的。当一侧子树的结点少了,向另一侧“借”一些结点;当一侧子树的结点多了,则“租”一些结点给另一侧。

为了更清楚地讲解这部分内容,先声明几个概念:

  • N-node:当前结点

  • P-parent:父结点

  • S-sibling:兄弟结点

  • U-uncle:叔父结点(P 的兄弟结点)

  • G-grand:祖父结点(P 的父结点)

 

左旋

 

左旋指的是以某个结点作为支点(旋转结点),其右子结点变为旋转结点的父结点,右子结点的左子结点变为旋转结点的右子结点,左子结点保持不变。

不考虑结点颜色,可以看到左旋只影响旋转结点和其右子树的结构,把右子树的结点往左子树移动。

 

右旋

 

右旋指的是以某个结点作为支点(旋转结点),其左子结点变为旋转结点的父结点,左子结点的右子结点变为旋转结点的左子结点,右子结点保持不变。

不考虑结点颜色,可以看到右旋只影响旋转结点和其左子树的结构,把左子树的结点往右子树移动。

 

 

变色

变色指的是结点的颜色由红变黑或由黑变红。

 

 

变换规则

将左旋、右旋和变色结合起来,得到一套变换规则。

变色:如果当前结点的父结点和叔父结点是红色,那么:

  • 把父结点和叔父结点变为黑色

  • 把祖父结点变为红色

  • 把指针定义到祖父结点

 

左旋:当前结点是右子树,且父结点是红色,叔父结点是黑色,对它的父结点左旋。

 

右旋:当前结点是左子树,且父结点是红色,叔父结点是黑色,那么:

  • 把父结点变为黑色

  • 把祖父结点变为红色

  • 对祖父结点右旋

 

红黑树搜索

 

由于红黑树本来就是平衡二叉搜索树,并且搜索也不会破坏树的平衡,所以搜索算法也与平衡二叉搜索树一致:

具体步骤如下:

  • 从根结点开始检索,把根结点设置为当前结点。

  • 若当前结点为空,返回 nil。

  • 若当前结点不为空,比较当前结点 key 与搜索 key 的大小。

  • 若当前结点 key 等于搜索 key,那么该 key 就是搜索目标,返回当前结点。

  • 若当前结点 key 大于搜索 key,把当前结点的左子结点设置为当前结点,重复步骤 2。

  • 若当前结点 key 小于搜索 key,把当前结点的右子结点设置为当前结点,重复步骤 2。

 

红黑树插入

红黑树插入操作分为下面两步:

 

 

定位插入的位置

 

具体步骤如下:

  • 从根结点开始检索。

  • 若根结点为空,那么插入结点设为根结点,结束。

  • 若根结点不为空,那么把根结点设为当前结点。

  • 若当前结点为 nil,返回当前结点的父结点,结束。

  • 若当前结点 key 等于搜索 key,那么该 key 所在结点就是插入结点,更新结点的值,结束。

  • 若当前结点 key 大于搜索 key,把当前结点的左子结点设置为当前结点,重复步骤 4。

  • 若当前结点 key 小于搜索 key,把当前结点的右子结点设置为当前结点,重复步骤 4。

 

 

 

插入后实现自平衡

建议新添加的结点默认为红色,因此这样能够让红黑树的性质尽快满足。不过如果添加的结点是根结点,设为黑色即可。

 

总结一下红黑树插入可能出现的所有场景:

①场景 1:红黑树为空树

红黑树的性质 2:根结点必须是黑色。

处理:直接把插入结点设成黑色并作为根结点。

 

②场景 2:插入结点的 key 已存在

二叉搜索树中不能插入相同元素,既然结点的 key 已经存在,红黑树也已平衡,无需重复插入。

 

处理:

  • 将插入结点设为将要替换结点的颜色

  • 更新当前结点的值为插入结点的值

 

③场景 3:插入结点的父结点为黑色

插入的结点默认是红色的,当它的父结点是黑色时,并不会破坏平衡。

处理:直接插入。

 

④场景 4:插入结点的父结点为红色

 

如果插入结点的父结点为红色,那么父结点不可能为根结点,所以插入结点总是存在祖父结点。这点很重要,后续的旋转操作需要祖父结点的参与。

 

场景 4.1:存在叔父结点,且为红色

 

由红黑树性质 4 可知:红色结点不能连续。那么此时该插入子树的红黑层数的情况是:黑-红-红。显然最简单的处理方式就是将其改为:红-黑-红。

处理:

  • 将父结点和叔父结点变为黑色

  • 将祖父结点变为红色

  • 将祖父结点设置为当前插入结点

 

场景 4.2:叔父结点不存在或为黑色,插入结点的父结点是祖父结点的左子结点

这种场景下,叔父结点所在的子树的黑色结点就比父结点所在子树的多,不满足红黑树的性质 5。

 

场景 4.2.1:插入结点是左子树

处理:

  • 将父结点变为黑色

  • 将祖父结点变为红色

  • 将祖父结点右旋

 

场景 4.2.2:插入结点是左子树

 

这种场景显然可以转换为 4.2.1。

处理:

  • 将父结点进行左旋

  • 将父结点设为插入结点,得到场景 4.2.1

  • 进行场景 4.2.1 的处理

 

场景 4.3:叔父结点不存在或为黑色,插入结点的父结点是祖父结点的右子结点

相当于场景 4.2 的方向反转,直接看图。

 

场景 4.3.1:插入结点是左子树

处理:

  • 将父结点变为黑色

  • 将祖父结点变为红色

  • 对祖父结点进行左旋

 

场景 4.3.2:插入结点是右子树

处理:

  • 将父结点进行右旋

  • 将父结点设置为插入结点,得到场景 4.3.1

  • 进行场景 4.3.1 的处理

 

下面举个例子,往一棵红黑树中插入元素,整棵树的变换如下图所示:

红黑树删除

红黑树删除操作也分为两步:

 

 

定位删除的位置

定位删除位置可以复用红黑树搜索的操作。

如果不存在目标结点,忽略本次操作;如果找到目标结点,删除后进行自平衡处理。

 

删除后实现自平衡

 

二叉搜索树删除的时候可能出现三种场景:

  • 若删除结点无子结点,直接删除即可。

  • 若删除结点只有一个子结点,用子结点替换删除结点。

  • 若删除结点有两个子结点,用**后继结点(大于删除结点的最小结点)**替换删除结点。

 

具体应用,可以借助这张图理解:

我们可以发现,另外两种二叉树的删除场景都可以通过相互转换变为场景一。

 

在场景二情况下:删除结点用其唯一的子结点替换,子结点替换为删除结点后,可以认为删除的是子结点,若子结点又有两个子结点,那么相当于转换为场景三,一直自顶向下转换,总是能转换为场景一。

 

在场景三情况下:删除结点用后继结点,如果后继结点有右子结点,那么相当于转换为场景二,否则转为场景一。

综上所述,删除的结点可以看作删除替换结点,且替换结点最后总是在树末。

 

下面总结一下红黑树删除可能出现的所有场景:

为了方面理解,我们先约定一下结点的叫法:

  • R:替换结点

  • P:替换结点的父结点

  • S:替换结点的兄弟结点

  • SL:兄弟结点的左子结点

  • SR:兄弟结点的右子结点

  • 灰色:结点颜色可能是红色,也可能是黑色

注意:R 是即将被替换到删除结点的位置的替换结点,在删除前,它还在原来所在位置参与树的子平衡,平衡后再替换到删除结点的位置,才算删除完成。

 

①场景 1:替换结点为红色

我们把替换结点换到了删除结点的位置时,由于替换结点为红色,删除也了不会影响红黑树的平衡,只要把替换结点的颜色变为删除的结点的颜色即可重新平衡。

处理:替换结点颜色变为删除结点的颜色。

 

②场景 2:替换结点为黑色

当替换结点是黑色时,就必须进行自平衡处理了,我们可以通过区分替换结点是其父结点的左子结点还是右子结点,来做不同的旋转,使树重新平衡。

 

场景 2.1:替换结点是左子树

场景 2.1.1:替换结点的兄弟结点为红色

 

若兄弟结点是红结点,那么根据红黑树性质 4,兄弟结点的父结点和子结点肯定为黑色,按照下图方式处理,得到删除场景 2.1.2.3。

处理:

  • 将兄弟结点变为黑色

  • 将父结点变为红色

  • 对父结点进行左旋,得到场景 2.1.2.3

  • 进行场景 2.1.2.3 的处理

 

场景 2.1.2:替换结点的兄弟结点为黑色

当兄弟结点为黑时,其父结点和子结点的具体颜色也无法确定,此时又得考虑多种子场景。

 

场景 2.1.2.1:替换结点的兄弟结点的右子结点为红色,左子结点任意颜色

即将删除的左子树的一个黑色结点,显然左子树的黑色结点少 1 了,然而右子结点又是红色,那么我们直接向右子树“借”个红结点来补充黑结点,并进行旋转处理。

 

如图所示:

处理:

  • 将兄弟结点的颜色变为父结点的颜色

  • 将父结点变为黑色

  • 将兄弟结点的右子结点变为黑色

  • 对父结点进行左旋

 

场景 2.1.2.2:替换结点的兄弟结点的右子结点为黑色,左子结点为红色

兄弟结点所在的子树有红结点,又可以向兄弟子树“借”个红结点过来,这就转换回了场景 2.1.2.1。

 

如图所示:

处理:

  • 将兄弟结点变为红色

  • 将兄弟结点的左子结点变为黑色

  • 对兄弟结点进行右旋,得到场景 2.1.2.1

  • 进行场景 2.1.2.1 的处理

 

场景 2.1.2.3:替换结点的兄弟结点的子结点都为黑色

兄弟子树没有红结点可以“借”了,再向父结点“借”。如果父结点是黑色,为了让父结点在所在的子树中保证平衡(替换结点即将删除,少了一个黑色结点,子树也需要少一个)先把兄弟结点变为红色,再让父结点成为新的替换结点。

处理:

  • 如果父结点为黑色:将兄弟结点变为红色;将父结点作为新的替换结点;重新进行删除结点的场景处理。

  • 如果父结点为红色:替换结点的父结点和替换结点的兄弟结点颜色交换;删除结点和替换结点的值交换后,删除替换结点。

 

场景 2.2:替换结点是右子树

实际上是场景 2.1 的镜像操作。

 

场景 2.2.1:替换结点的兄弟结点为红色

处理:

  • 将兄弟结点变为黑色

  • 将父结点变为红色

  • 对父结点进行右旋,得到场景 2.2.2.3

  • 进行场景 2.2.2.3 的处理

 

场景 2.2.2:替换结点的兄弟结点为黑色

 

场景 2.2.2.1:替换结点的兄弟结点的左子结点为红色,右子结点任意颜色

处理:

  • 将兄弟结点的颜色变为父结点的颜色

  • 将父结点变为黑色

  • 将兄弟结点的左子结点变为黑色

  • 对父结点进行右旋

 

场景 2.2.2.2:替换结点的兄弟结点的左子结点为黑色,右子结点为红色

处理:

  • 将兄弟结点变为红色

  • 将兄弟结点的右子结点设为黑色

  • 对兄弟结点进行左旋,得到场景 2.2.2.1

  • 进行场景 2.2.2.1 的处理

 

场景 2.2.2.3:替换结点的兄弟结点的子结点都为黑色

处理:

  • 如果父结点为黑色:将兄弟结点变为红色;将父结点作为新的替换结点;重新进行删除结点的场景处理。

  • 如果父结点为红色:替换结点的父结点和替换结点的兄弟结点颜色交换;删除结点和替换结点的值交换后,删除替换结点。

最后

IT行业的道路固然是充满了阳光了,一路上充满了美景,但是也充满了艰苦和崎岖,在突破了之后一路的阴霾,云霄之上,必然是一番广阔的云海。

  • 整理了一份关于java的系统化资料,从Javase- ssm-springcloud,包括了面试题,PDF电子书,网上商城项目,个人博客项目,分布式项目等都有想学习Java或者转行,大学生都非常实用,无任何套路免费提供,,加我裙697888503下载,有什么问题都可以来问我
  • 最新Java精讲视频,PDF书籍教程,面试题,学习手册

在这里说一下,因为我是自学出来的,也深知自学的艰苦,如果你现在也在自学Java,在自学的过程当中有遇见任何关于学习方法,学习路线,学习效率等方面的问题,资料都可以评论留言

 原文链接:juejin.im/post/5e509b27f265da57455b3f33

程序员面试必备——红黑树详细图解 欢迎访问我的博客原文 红黑树(Red Black Tree)是一种自平衡的二叉搜索树(Self-balancing Binary Search Tree)。以前也叫做平衡二叉 B 树(Symmetric Binary B-tree)。 预备知识 树的知识框架结构如下图所示: 平衡二叉搜索树 平衡二叉搜索树(Balanced Binary Search Tree),英文简称 BBST。经典常见... 阅读详情

相关推荐

java程序员面试宝典pdf下载,大厂面试必备技能

二、面试题 面:考你几个红黑树的知识点???? 红黑树的数据结构都用在哪些场景,有什么好处? 红黑树的时间复杂度是多少? 红黑树中插入新的节点时怎么保持平衡? 面:2-3树都是不没看,回去等消息吧! 三、2-3树与红黑树的等价性 红黑树规则 1. 根节点是黑色 2. 节点是红黑或者黑色 3. 所有子叶节点都是黑色(叶子是NIL节点,默认没有画出来) 4. 每个红色节点必须有两个黑色子节点(也同样说明一条链路上不能有链路的红色节点) 5. 黑高,从任一节点到齐每个叶子节点,经过的路径都包含相同数目的黑色节

m0_57768082的博客 239

什么是红黑树(内存最优的二叉树)

一.红黑树定义 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 它是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的"红黑树"。 红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查...

s33s33333的博客 2223

判断两个多边形是否相交(java实现)

判断两个多边形是否相交 ,当前认为一个点相交也是相交,可针对凹多边形和凸边型等多复杂的多边形进行相交判断,采用java实现,因为网上java实现的比较少,所以这里写下如何实现,适用于碰撞检测,地图等等应用场景

IT_CREATE的博客 5845

红黑树介绍

红黑树是一种含有红黑结点并能自平衡的二叉搜索树。为了保证平衡,红黑树必须满足以下性质:每个结点是要么是红色或黑色根结点必须是黑色叶结点(外部结点、空结点)是黑色红色结点不能连续(也就是,红色结点的孩子和父亲都是黑色)对于每个结点,从该点至 nil(树尾端,Java 中为 null 的结点)的任何路径都包含所相同个数的黑色结点。

z_ssyy的博客 733

从生成到检测:全面解析Deepfake技术的演进与对抗策略

本文全面解析了Deepfake技术的演进与对抗策略,从GAN生成技术到先进的检测手段,探讨了其在娱乐与安全领域的双重影响。文章详细介绍了Deepfake的核心原理、技术迭代关键节点以及最新的检测方法,揭示了AI生成与识别的激烈博弈。同时,展望了量子计算和生物特征认证在未来攻防战中的潜在应用。

jenkins8butler的博客 255

从‘眼花缭乱’到‘心中有数’:rs-fMRI统计分析全流程避坑指南(附DPABI操作截图)

本文详细解析了rs-fMRI统计分析的全流程,从质量控制到统计模型选择,再到多重比较校正和结果解读。特别针对DPABI软件操作中的常见陷阱提供实用指南,帮助研究者避免FDR和GRF校正等关键环节的错误,实现从数据混乱到清晰分析的转变。

weixin_33686714的博客 400

面试被问“红黑树”,我一脸懵逼......

点击上方“Github爱好者社区”,选择星标回复“资料”,获取小编整理的一份资料来自:掘金,作者:FiTeen链接:https://juejin.im/post/5e509b27f265...

GitHub爱好者社区 823

Pintos project 1 实验报告(代码分享)

任务一 Alarm Clock 用到的相干目录有: pintos/src/devices time.h && time.c pintos/src/threads thread.h && thread.c 预期pass希望:暂无,安装pintos之后,第一次对threads进行make check操作,可以发现以alarm--开头的前六个文件,以及mlfqs-fair-2和mlfqs-fair-20文件,一开始就测试成功pass。但是为了避免对后期的修改有影响,这里还是要

m0_53112875的博客 6872

红黑树简介

一、什么是红黑树 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。 红黑树是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性

weixin_54156274的博客 1686

小新学习K8s第一天之K8s基础概念

kubernetes是一个可移植,可扩展的开源平台,用于管理容器化工作负载和服务,有助于声明式配置和自动化。它拥有庞大且快速发展的生态系统。kubernetes服务,支持和工具随处可见。作用:用于自动部署,扩展和管理“容器化应用程序”的开源系统。可以理解成k8s是负责自动化运维管理多个容器化程序(比如docker)的集群,是一个生态及其丰富的容器编排框架工具。

pangdongqiqi的博客 1229

触摸屏蓝牙控制

使用杰理芯片通过蓝牙实现触摸屏功能,需要结合触摸屏数据采集、蓝牙数据传输以及移动端应用的实现。

m0_46145044的博客 1109

红黑树模拟软件_【程序员面试必备】红黑树详细图解

欢迎访问我的博客原文红黑树(Red Black Tree)是一种自平衡的二叉搜索树(Self-balancing Binary Search Tree)。以前也叫做平衡二叉 B 树(Symmetric Binary B-tree)。预备知识树的知识框架结构如下图所示:平衡二叉搜索树平衡二叉搜索树(Balanced Binary Search Tree),英文简称 BBST。经典常见的平衡二叉搜索树...

weixin_39975366的博客 138

java实现长短期记忆人工神经网络LSTM(附完整源码)

java实现长短期记忆人工神经网络LSTM(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1695

硬核图解面试最怕的红黑树【建议反复摩擦】

面试官看了人傻掉,还可以这样学?

敖丙 6万+

51智能小车(双轮)

前几天接了个小单子,是一个基于51单品机的作品,发现自己对小车的认识还是不太🆗。也算是完成了任了的;欢迎各位小伙伴来多多交流,大家一起进步。最后有需要单片机课程设计的小伙伴滴滴我哦(有偿)。企鹅:2397746994。

qq_56992543的博客 2348

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

红黑树与平衡二叉树_理解红黑树很难?不存在的,史上最详细的红黑树图解

HashMap的实现原理可以说是面试中必问的一道面试题了,它可以考察一个程序员的数据结构功底和对技术的钻研深度。Java7中HashMap的实现就是一个数组,然后数组中的每一个元素又是一个链表,这个链表的存在是为了解决哈希冲突导致的问题,就是一个元素经过哈希计算后得到元素的存储位置,但是这个位置已经有其它元素占领,也就是占领元素和新插入元素都在这个数组中的同一个位置,此时就用链表进行维护...

weixin_39787397的博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

2019年 BET公司程序员面试必备:算法研究、编程艺术、红黑树、机器学习总结大全

一、微软面试100题系列 https://blog.youkuaiyun.com/v_JULY_v/article/details/6543438 A、横空出世,席卷Csdn--评微软等数据结构+算法面试100题 (微软面试100题系列原题+答案索引) B、微软100题 (微软面试完整第1-100题) C、微软面试100题2010年版全部答案集锦(含下载地址) D、全新整理:微软、谷歌、百度等...

WangY.H 1415

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java面试-TreeMap 的底层实现:红黑树详解

《Java面试200问:TreeMap红黑树底层实现详解》 本文深入剖析了TreeMap基于红黑树的有序映射实现机制。主要内容包括: 红黑树的五大特性:节点双色性、根黑规则、叶黑规则、红节点限制和黑高一致性,这些特性保证了树的高度平衡(h≤2log(n+1))。 关键操作原理: 插入时通过染色和旋转(左旋/右旋)处理四种冲突场景 删除时通过复杂调整维护黑高平衡 TreeMap源码实现: 使用Entry节点维护红黑树结构 put/get/remove操作均保持O(log n)时间复杂度 原生支持高效的范围查询

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

程序员必备的面试技巧

程序员的面试过程通常涉及技术能力的评估以及软技能的考察。

r081r096的博客 1281

面试让我手写红黑树?!

面试官那么喜欢让你聊聊 HashMap?因为 HashMap 涉及的东西广,用到的数据结构多,问题延展性好,一个 HashMap 就能聊下来80%的数据结构了。而且面试 HashMap 能通过你对红黑树的了解定位出你哪个级别的研发人员。而红黑树的知识点可以说是非常庞大,在学习红黑树时也不能一下就能掌握,甚至很程序员压根就没搞明白红黑树,只是背下来它的几条限定规则而已。其实一开始我也是这样! 不过总感觉这块的知识点不搞个明明白白,就闹心。

bugstack虫洞栈 4832

图解红黑树原理,再也不怕面试被问到,不详细算我输!

前言 最近针对互联网公司面试问到的知识点,总结出了Java程序员面试涉及到的绝大部分面试题及答案分享给大家,希望能帮助到你面试前的复习且找到一个好的工作,也节省你在网上搜索资料的时间来学习。 内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ、Kafka、Linux等技术栈。 完整版Java面试题地址:JAVA后端面试题整合 引言 预防针:红黑

weixin_56667968的博客 574

【转】程序员面试、算法研究、编程艺术、红黑树、机器学习5大经典原创系列集锦与总结

   程序员面试、算法研究、编程艺术、红黑树、机器学习5大经典原创系列集锦与总结 作者:July--结构之法算法之道blog之博主。 时间:2010年10月-2018年5月,一直在不断更新中.. 出处:http://blog.youkuaiyun.com/v_JULY_v 。 说明:本博客中部分文章经过不断修改、优化,已集结出版成书《编程之法:面试和算法心得》。 前言  &...

柏拉图工作室-AI学科 8458

图解八股文面试网:用可视化方式高效备战程序员面试

在程序员技术面试中,如何高效掌握JVM、并发编程、MySQL、Redis等核心知识点,是许多求职者关注的焦点。传统的纯文本资料往往信息密度高、逻辑关系复杂,难以形成长期记忆。图解作为一种直观的知识呈现方式,将复杂的原理、流程与结构转化为可视图表,有效降低认知负担,帮助学习者从“背题”走向“看懂题”。这种可视化方法不仅适用于面试冲刺,也适合系统化梳理计算机基础知识。本文从图解技术的价值出发,介绍一个开源的原创图解八股文面试项目,覆盖操作系统、网络、数据库、中间件等高频考点,并结合部署实践、内容创作方法论与二次

weixin_34034670的博客 381

红黑树模拟软件_清华毕业程序员面试被吐槽:不会写红黑树,就敢要1万8?

面试,于我而言,是一个备受煎熬的过程。当面试官提出专业问题的时候,你的内心独白是什么?反正在我看来,有些问题真的是极其无知和愚昧的。咱也不知道人家为什么会问这么无知的问题,咱也只能顺着面试官的意思往下讲述。至于自己曾经的工作经历、工作经验,也都只是面试官的常态问题,不问个清清楚楚、明明白白,他们是不会放过你的。就这样,懵懵懂懂结束了。当然了,这也是面试官本着尽职尽责、为公司挑选人才的心态,并不是真...

weixin_39613208的博客 205

程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦

程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大经典原创系列集锦与总结 作者:July--结构之法算法之道blog之博主。 时间:2010年10月-2012年11月。 出处:http://blog.youkuaiyun.com/v_JULY_v 。 声明:版权所有,侵犯必究。   前言     开博已过24个月,回首这24个月,发现自己在本blog上着实花费了巨大的时间与精力,写

wqc02的专栏 1635
上一篇: 计算机基础知识对程序员来说重要吗?
下一篇: Java到底好不好学
又是一个特殊的一天
博客等级 码龄7年 288粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值