搞懂红黑树
文章目录
本文只能算是杂谈了,并没有谈到红黑树的核心
我是看了简书里的一个作者写的博客,我感觉写的还是挺不错的,在这里做一下学习总结。
我看的博客链接:https://www.jianshu.com/p/570243549e4e
作者:rainple
来源:简书
直接看他写的也可以,以下只是我的总结
要搞懂红黑树需要的知识
这些是在我看那个博客的时候,总结的几点我不懂的知识点,算是查漏补缺吧。懂的大佬直接看链接就好。
- 对二叉树有一定的了解
- 红黑树的特性
- 使用红黑树的好处
- 左旋和右旋
- java中的传值引用(个人觉得有必要了解,不然会懵)
- …大概就这么多吧
- 二叉树
这是一颗完全二叉树。

- 二叉树跟普通的树的区别就是,二叉树中的一个父节点的子树(度)最多为2。
- 也可以给二叉树加上其他特性,也可以说是规定,而这些规定可以让树的复杂度降低。
- 例如,左子节点上的数据要比父节点小,右子节点要比父节点大,(总之节点是根据一定的顺序排放的),这样可以方便查找
- 二叉树的其他概念,一般二叉树、完全二叉树、满二叉树,这些只是二叉树的不同形态而已,能够识别即可。
- 还有前序遍历(父-左子-右子),中序遍历(左子-父-右子),后序遍历(左子-右子-父),层序遍历(从上至下,从左到右),有兴趣的可以了解一下,与本文内容不大
-
红黑树的特性
1、每个节点不是红色就是黑色。
2、根节点为黑色。
3、每个叶子节点都是黑色的。
4、每个红色节点的子节点都是黑色。
5、任意节点,到其任意叶节点的所有路径都包含相同的黑色节点。
在考虑编码实现时,时时刻刻都要考虑是否满足这五条特性,如果不满足,就达不到红黑树的性能了 -
使用红黑树的好处
- 插入和删除时的操作更加少,一般的树都是可以直接插入或删除的,而红黑树一旦插入或删除之后,就会不满足红黑树的特性,这就需要进行一定的平衡操作。
- 红黑树恢复平衡的操作的时间复杂度为 O(log n) ,仅几次左旋或右旋还有变色即可完成操作。
- 平衡的红黑树高度大约log(n),且最坏情况高度不会超过2log(n)。树的高度越低查询效率越高。
- 左旋和右旋
首先,需要了解的是,左旋和右旋不会破坏二叉树的特性。
这是一个满足左子节点小于父节点,右子节点大于父节点的二叉树

经过右旋操作后

- java中的传值引用
在看了很多算法的博客后,我一直有一个疑问,为什么这个函数可以改变原来的对象的数据
看这个链接的内容就知道了
java的传值方式
学习的重点
插入时的各种情况的处理,删除时各种情况的处理。这些处理过程的思维是最重要,绝大多数算法的学习过程都是这样的,先分析情况,然后使用if,else-if来判断情况,进行处理。
引文链接
|你知道的越多,不知道的越多。 |如果本文章内容有问题,请直接评论或者私信我。如果觉得写的还不错的话,点个赞也是对我的支持哦。 |未经允许,不得转载!|微信搜【程序员徐小白】,关注即可第一时间阅读最新文章。回复【面试题】有我准备的50道高频校招面试题,以及各种学习资料。

浙公网安备 33010602011771号