前段时间,虎扑识货面试一直问我红黑树和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月份,那时候就想对红黑树的相关代码进行学习的,但是我那时的状态,和当时的情况让我没法投入很多时间在这件事上,所以只是了解了大概,只知道红黑树的插入和删除情况较多,也较复杂。在之前的话,应该是毕业之前了,学习了一下平衡二叉树,和红黑树,当时刚接触左旋右旋的操作,也有点懵逼。这次算是第三次学习红黑树了,整体情况比我之前预期的要好,没想到,所有的概念和情况都能很顺利的理解,看代码也没有那么费劲,原理理解了代码逻辑就清晰了。当然删除节点部分还是挺复杂的,需要多看看。
总的来说,通过这次学习,对红黑树的掌握更进一步,但是还不到能“手撕”他的地步,但至少能对各种操作的情况有了基本的认识,代码也看得懂了。