搞懂红黑树

本文只能算是杂谈了,并没有谈到红黑树的核心
我是看了简书里的一个作者写的博客,我感觉写的还是挺不错的,在这里做一下学习总结。
我看的博客链接: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来判断情况,进行处理。

引文链接

一篇文章让你彻底弄懂红黑树的原理

posted @ 2020-05-09 23:05  程序员徐小白  阅读(58)  评论(0)    收藏  举报