导语
回首向来萧瑟处,归去,也无风雨也无晴。
我一哥们也是做Java开发,暂且先叫他峰哥吧,到今年已经入行6年了,每天还是写一些业务代码,至今还是个单身狗,愁的头发真的都快谢顶了。
虽然峰哥每天做着CRUD的工作,但每天还是做着能进BAT的梦,尤其是今年,公司扛不住疯狂裁员,峰哥也不出意外的被裁掉了。被裁后,峰哥开始海投简历,说实话,按照我对他的了解,峰哥平时就比较贪玩,上进心也不强,总是逼不得已为了高薪跳槽才去学习,到最后终究是竹篮打水一场空。
想想峰哥马上就要30岁了,以后到底该何去何从?
我结合峰哥个人的想法,我给他的建议还是进阶自己的技术,成为更高阶的程序员,这是最直接的发展方向,也是大部分程序员的选择,这就像是一个游戏,通过不断完成更有挑战的任务,获得级别的提升。
二、面试题
面:考你几个红黑树的知识点🦀
- 红黑树的数据结构都用在哪些场景,有什么好处?
- 红黑树的时间复杂度是多少?
- 红黑树中插入新的节点时怎么保持平衡?
面:2-3树都是不没看,回去等消息吧!
三、2-3树与红黑树的等价性
红黑树规则
1. 根节点是黑色
2. 节点是红黑或者黑色
3. 所有子叶节点都是黑色(叶子是NIL节点,默认没有画出来)
4. 每个红色节点必须有两个黑色子节点(也同样说明一条链路上不能有链路的红色节点)
5. 黑高,从任一节点到齐每个叶子节点,经过的路径都包含相同数目的黑色节点
那么,这些规则是怎么总结定义出来的呢?接下里我们一步步分析讲解。
1. 为什么既有2-3树要有红黑树
首先2-3树
(读法:二三树)就是一个节点有1个或者2个元素,而实际上2-3树转红黑树是由概念模型2-3-4树
转换而来的。-4叉
就是一个节点里有3个元素,这在2-3树中会被调整,但是在概念模型中是会被保留的。
虽然2-3-4树
也是具备2-3树
同样的平衡树的特性,但是如果直接把这样的模型用代码实现就会很麻烦,且效率不高,这里的复杂点包括;
- 2-叉、3-叉、4-叉,三种结构的节点类型,互相转换复杂度较高
- 3-叉、4-叉,节点在数据比较上需要进行多次,不像2-叉节点,直接布尔类型比较即可非左即右
- 代码实现上对每种差异,都需要有额外的代码,规则不够标准化
所以,希望找到一种平衡关系