我特么今天跟红黑树干起来了

前段时间,虎扑识货面试一直问我红黑树和b+树的相关内容,b+树还是挺熟悉的,但是红黑树面试基本上没人问,所以一年多没看过,结果我连红黑树最基本的概念都说不准缺。遇到对原理这么执着的面试官,不知道是幸运呢还是幸运呢?曾几何时,我也是数据结构和算法的坚定支持者,这次面的我好像什么都不知道似的。算了,既然又遇到了,就再看看吧。

这次学习主要参考了4篇博客,这四篇各有特色

第一篇:https://blog.csdn.net/qq_41854763/article/details/82694873

在这片博客中主要学的是红黑树的基本概念和插入数据,删除数据时对树的结构的调整。其中基本概念和插入部分讲的很清楚,删除数据部分,有的措辞有些不够清晰,看着容易糊涂。这时可以参考第二篇

第二篇:https://www.jianshu.com/p/e136ec79235c

这篇博客我只看了删除数据部分的介绍,比第一篇讲的要清楚一些,完全可以让你理解清楚。还有,这篇博客的点赞数高达651次,其质量不用多说了。

第三篇:https://www.cnblogs.com/geekma/archive/2012/06/27/2566226.html

这个博客就一个内容,展示红黑树插入和删除数据时的调整逻辑,可以跟着这篇博客来理解红黑树插入和删除的各种情况

第四篇:https://www.cnblogs.com/skywang12345/p/3624343.html#a2

这篇博客讲的就非常全了,里面有红黑树的代码实现,包括java,c++等。想把红黑树落实到代码的同学可以学习一下。第一篇播客里有java版的代码(应该是参考第四篇的),也能看下。

关于我本次学习的感受:上次看红黑树是18年的12月份,那时候就想对红黑树的相关代码进行学习的,但是我那时的状态,和当时的情况让我没法投入很多时间在这件事上,所以只是了解了大概,只知道红黑树的插入和删除情况较多,也较复杂。在之前的话,应该是毕业之前了,学习了一下平衡二叉树,和红黑树,当时刚接触左旋右旋的操作,也有点懵逼。这次算是第三次学习红黑树了,整体情况比我之前预期的要好,没想到,所有的概念和情况都能很顺利的理解,看代码也没有那么费劲,原理理解了代码逻辑就清晰了。当然删除节点部分还是挺复杂的,需要多看看。

总的来说,通过这次学习,对红黑树的掌握更进一步,但是还不到能“手撕”他的地步,但至少能对各种操作的情况有了基本的认识,代码也看得懂了。

红黑树的GLB(Greatest Lower Bound)指的是树中小于等于给定元素的最大值。 红黑树是一种自平衡二叉搜索树,它的每个节点都被涂上了红色或黑色。红黑树的特点是: 1. 每个节点不是红色就是黑色。 2. 根节点是黑色的。 3. 每个叶子节点都是黑色的空节点(NIL节点)。 4. 如果一个节点是红色的,则它的两个子节点都是黑色的。 5. 对于每个节点,从该节点到其所有后代叶子节点的简单路径上,均包含相同数目的黑色节点。 在红黑树中查找GLB的过程如下: 1. 从根节点开始,如果根节点的值等于给定元素,那么根节点就是GLB。 2. 如果根节点的值大于给定元素,那么GLB一定在根节点的左子树中,继续在左子树中递归查找。 3. 如果根节点的值小于给定元素,那么GLB可能在根节点的右子树中,也可能在根节点本身。首先在右子树中递归查找,如果右子树中找到了小于等于给定元素的最大值,那么就是GLB。如果右子树中找不到小于等于给定元素的最大值,那么根节点就是GLB。 4. 如果根节点的右子树为空,且根节点的值小于给定元素,那么根节点就是GLB。 5. 如果根节点的左子树为空,那么GLB一定在右子树中,继续在右子树中递归查找。 6. 如果根节点的左右子树都为空,那么根节点就是GLB。 因为红黑树的平衡性质,查找GLB的时间复杂度为O(log n),其中n是树中节点的数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值