- 时间:2022-08-18 00:31 编辑: 来源: 阅读:320
- 扫一扫,手机访问
摘要:快进收藏吃灰!字节跳动用最简单的方式解释了红黑树算法。
<源代码交易>
不知道大家有没有看今天面试官被杀的视频。我神奇的同事不知道大脑回路突然被打开了。他在办公室问:“面试官有没有问红黑树的事,把头发给了面试者?问大家,我不会再问这个了,然后突然开始!”!然后办公室就出现了讨论boom树,大学时代的数据结构与算法重点之一。当时真的是头疼了很久,但其实现在想想,什么都没变,还是头疼。看下图,树上包含的内容快进收藏吃灰!字节跳动用最简单的方式讲解了红黑树的算法,树的内容集中在二叉树上。首先我们来复习一下BST树的基础知识:二叉查找树(简称BST),又称二叉排序树,属于树的一种。数据采用二叉树组织,树的每个节点包含键值、数据值data、左子节点指针和右子节点指针。 其中,关键值是核心部分,其值决定了树的组织形状;值数据是节点对应的数据,有些场景可以忽略。比如key是身份证号,data是人名,通过身份证号找到人名;左子节点指针指向左子节点;右子节点指针指向右子节点 特征:左右子树也是二分搜索法树。 左子树中所有节点的键值都小于其根节点的键值。 右侧子树中所有节点的键值都大于其根节点的键值。 二叉查找树可以是一棵空树。 一般来说,树中每个节点的键值是不相等的,但是根据需要也可以在树中插入相同的键值。AVL树,也被称为平衡二叉查找树,是其发明者名字的缩写。 AVL树属于树的一种,也是二叉查找树。不同的是,它可以通过肯定性机制保证二叉查找树的平衡,平衡二叉查找树的查询效率更高。 特点:AVL树是一个二叉查找树。 AVL树的左右子节点也是AVL树。 AVL树具有二叉查找树的所有基本特征。 每个节点的左右子节点高度差的绝对值最多为1,即平衡因子在[-1,1]范围内。 另一个是我们今天讨论的焦点:红黑树。让我们来看看红黑树,这是一个自我平衡的二叉查找树。它是由鲁道夫·拜尔在1972年发明的。它类似于AVL树,在插入和删除操作中可以通过旋转来保持二叉查找树的平衡,从而达到高效的搜索性能。 它可以在O(登录)时间内进行搜索、插入和删除。 红树相当于2-3-4树,但有些红黑树只能留下红树,红树相当于2-3树。 对于AVL树来说,红黑树在插入/删除操作时牺牲一部分平衡来换取一些旋转操作,整体性能优于AVL树。 特征:节点为红色或黑色。 根是黑色的。 每个叶节点(零节点)是黑色的。 每个红色节点的两个子节点是黑色的。 (从每个叶子到根的所有路径上不能有两个连续的红色节点)从任何节点到每个叶子的所有路径都包含相同数量的黑色节点。 最长路径不超过最短路径的2倍。快进收藏吃灰!字节跳动用最简单的方式解释了红黑树算法。上图是一棵简单的红黑树。 其中Nil是叶节点,它是黑色的。 (H和M的黑叶节点没有画出来。)具体我们需要对红黑树的几个节点的名称达成一致,如图2所示,以免后面的解释混淆。 快进收藏吃灰!字节跳动大哥用最简单的方式解释了红黑树算法。我们将正在被求解(遍历)的节点称为当前节点,如图2中的D所示。它的父亲称为父节点,它的父亲的另一个子节点称为兄弟节点,父亲的父亲称为祖父节点。 3.基本操作如前所述,红黑树可以自我平衡。它靠的是什么?三种操作:左手,右手,变色。 左旋:逆时针旋转,父节点被自己的右子节点替换,成为自己的左子节点(注:左旋只影响旋转节点及其右子树的结构,将右子树的节点移到左子树。 )快进收藏吃灰!字节跳动大哥用最简单的方式解释了红黑树算法是右撇子:顺时针旋转时,父节点被左子所取代,他变成了自己的右子(注:右撇子只影响旋转节点及其左子树的结构,将左子树的节点移到右子树。 )快进收藏吃灰!字节跳动用最简单的方式解释了红黑树算法的颜色变化:节点的颜色由红变黑或由黑变红。 所以不难看出,无论是什么旋转操作,树的节点都是局部变化的,但要保持红黑树的性质,节点不能四处移动,还得变色。 怎么改?具体情况有不同的变化。来看看快进收藏吃灰吧!老板字节跳动用最简单的方式解释了红黑树算法。进收藏吃灰!老板字节跳动用最简单的方式解释了红黑树算法。进收藏吃灰!老板字节跳动用最简单的方式解释了红黑树算法。进收藏吃灰!老板字节跳动用最简单的方式解释了红黑树算法。进收藏吃灰!字节跳动大哥用最简单的方式解释了红黑树算法。至此,变色任务完成。按部就班,符合规则,循序渐进。错过一步,可能就不知道快进收藏吃灰了!老板字节跳动用最简单的方式解释了红黑树算法。理论上的东西基本都解释到这里了。红黑树难吗?说实话,我个人觉得这种蠢事太丢人了。4.红黑树的一部分实现了红黑树的节点。红黑树是对二叉查找树的改进,因此它的节点类似于二叉查找树,只是增加了一个布尔变量来表示节点的颜色。请参见RBNode类:公共类RBNode 由于红黑树始终保持黑色的完美平衡,其搜索的最坏时间复杂度为O(2lgN),即整棵树恰好与黑色分离。 这么好的搜索效率得益于红黑树的自平衡特性,而在这背后,红黑树的插入操作是必不可少的~ 5.2插入操作包括两个部分:一找到插入位置就找到要插入的父节点;插入后自动平衡 插入的父节点很简单,和搜索操作区别不大。我们用流程图总结一下。快进收藏吃骨灰!字节跳动大哥用最简单的方式解释了红黑树算法。特别注意:如果面试时有人问你插入的节点应该是什么颜色?答案是红色。 原因很简单。当红色的父节点是黑色时(如果存在),红黑树的黑色平衡没有被破坏,所以不需要自平衡操作。 但是如果插入节点是黑色的,那么插入位置所在子树的黑色节点总是多1,所以自平衡是必要的。