文章目录

  • 1. 简介红黑树 and 红黑树的性质
  • 2. 在红黑树中操作元素
    • 2.1 在红黑树中查找一个元素
    • 2.2 在红黑树中插入元素
  • 3. 手撕红黑树
  • 4. 通过总体聊聊AVL树和红黑树

1. 简介红黑树 and 红黑树的性质

我们在前面学习过二叉树,而二叉树有被简单的分为普通二叉树,二叉搜索树,完全二叉树,二叉平衡树等,在二叉搜索树中包含有 AVL树,红黑树。博主在以前的文章中写过AVL树的相关内容,有兴趣的读者可以去康康,直接甩链接(124条消息) 【数据结构高阶】终于有人把AVL树给说清了_小小怪下士~的博客-CSDN博客

我们学习过AVL树的同学们都知道,AVL树是一个绝对平衡的二叉树,所谓的绝对平衡说的就是一个节点的左右子树的高度之差的绝对值是不能超过1的 ,我们同时也知道这个AVL树主要是被用于查找元素的,为了提高查找元素的效率我们才让它绝对平衡,这样它的查找元素的时间复杂度就为O(logn),它中添加和删除元素的时候,就显得格外吃力了。

于是我们今天介绍一个我们的红黑树,这个特殊的二叉树其实也是一个平衡树,但是没有AVL树那么的绝对,它是相对平衡的。

有关于红黑树的性质:

  1. 每个节点要么是黑色,要么是红色

  2. 根节点永远是黑色的

  3. 每个叶子节点(NIL)是黑色的

  4. 每个红色节点的两个子节点一定都是黑色,不能有两个红色节点相连

  5. 任意一个节点到每个叶子节点的路径都包含相同数量的黑色节点

  6. 如果一个节点是黑色的,那么这个节点肯定存在两个子节点

2. 在红黑树中操作元素

2.1 在红黑树中查找一个元素

其实这里所谓的红黑树也就是一个变得较为平衡的二叉搜索树,但是这个平衡没有AVL树那么的绝对平衡。也就是因为这一点,我们这里的红黑树的查询效率会比AVL树稍逊一筹。原因还是归结于红黑树不是那么严格平衡的二叉树,它要求树中的最大的遍历路径要小于树中最短遍历路径的2倍。

说起查找元素还是和普通的二叉搜索树是一样的。就还是那上面的这张图来说,就比如我现在要在红黑树中查找7这个元素:即从根节点看是找到,8 > 7,那么就要左子树中寻找,然后遇到了4,4 < 7 去右子树中寻找,接着又遇到了5,5 < 7 ,又去右子树中寻找,紧接着就碰到了7, 7 == 7 那么此时就找到了元素。

其实在红黑树中查找元素的最好效率就是O(logn),这就是当每个节点的最右子树的是平衡的,那么此时的红黑树就变成了AVL树。总之呢,AVL树的查找效率 >= 红黑树的查找效率 (=:红黑树变成了AVL树)

2.2 在红黑树中插入元素

那么就下来就介绍一个红黑树的插入喽❤️❤️❤️❤️❤️❤️

插入操作大致分为这两个步骤: