我是看了简书里的一个作者写的博客,我感觉写的还是挺不错的,在这里做一下学习总结。
我看的博客链接:https://www.jianshu.com/p/570243549e4e
作者:rainple
来源:简书
直接看他写的也可以,以下只是我的总结

要搞懂红黑树需要的知识

这些是在我看那个博客的时候,总结的几点我不懂的知识点,算是查漏补缺吧。懂的大佬直接看链接就好。

  • 对二叉树有一定的了解
  • 红黑树的特性
  • 使用红黑树的好处
  • 左旋和右旋
  • java中的传值引用(个人觉得有必要了解,不然会懵)
  • …大概就这么多吧
  1. 二叉树
    这是一颗完全二叉树。
    搞懂红黑树
  • 二叉树跟普通的树的区别就是,二叉树中的一个父节点的子树(度)最多为2。
  • 也可以给二叉树加上其他特性,也可以说是规定,而这些规定可以让树的复杂度降低。
  • 例如,左子节点上的数据要比父节点小,右子节点要比父节点大,(总之节点是根据一定的顺序排放的),这样可以方便查找
  • 二叉树的其他概念,一般二叉树、完全二叉树、满二叉树,这些只是二叉树的不同形态而已,能够识别即可。
  • 还有前序遍历(父-左子-右子),中序遍历(左子-父-右子),后序遍历(左子-右子-父),层序遍历(从上至下,从左到右),有兴趣的可以了解一下,与本文内容不大
  1. 红黑树的特性
    1、每个节点不是红色就是黑色。
    2、根节点为黑色。
    3、每个叶子节点都是黑色的。
    4、每个红色节点的子节点都是黑色。
    5、任意节点,到其任意叶节点的所有路径都包含相同的黑色节点。
    在考虑编码实现时,时时刻刻都要考虑是否满足这五条特性,如果不满足,就达不到红黑树的性能了

  2. 使用红黑树的好处

  • 插入和删除时的操作更加少,一般的树都是可以直接插入或删除的,而红黑树一旦插入或删除之后,就会不满足红黑树的特性,这就需要进行一定的平衡操作。
  • 红黑树恢复平衡的操作的时间复杂度为 O(log n) ,仅几次左旋或右旋还有变色即可完成操作。
  • 平衡的红黑树高度大约log(n),且最坏情况高度不会超过2log(n)。树的高度越低查询效率越高。
  1. 左旋和右旋
    首先,需要了解的是,左旋和右旋不会破坏二叉树的特性。
    这是一个满足左子节点小于父节点,右子节点大于父节点的二叉树
    搞懂红黑树
    经过右旋操作后
    搞懂红黑树
  2. java中的传值引用
    在看了很多算法的博客后,我一直有一个疑问,为什么这个函数可以改变原来的对象的数据
    看这个链接的内容就知道了
    java的传值方式

学习的重点

插入时的各种情况的处理,删除时各种情况的处理。这些处理过程的思维是最重要,绝大多数算法的学习过程都是这样的,先分析情况,然后使用if,else-if来判断情况,进行处理。
一篇文章让你彻底弄懂红黑树的原理

相关文章:

  • 2021-08-29
  • 2021-09-17
  • 2021-08-26
  • 2021-05-27
  • 2021-10-26
猜你喜欢
  • 2021-06-17
  • 2022-03-04
  • 2021-05-05
  • 2021-08-15
  • 2021-05-13
  • 2021-04-01
相关资源
相似解决方案