1.前言
红黑树本质上也是一棵二叉搜索树,但是它并不是严格意义上的高度平衡,只是它接近平衡。那么红黑树只是接近平衡,而我们前面学到过AVL树是一棵高度平衡的二叉树,时间复杂度是Log N,那么我们为什么还要学习红黑树呢?这不是增加学习的负担嘛?本篇文章讲会详细讲解为什么有了AVL树之后还要学红黑树,以及红黑树的底层大致原理是什么。
本章重点:
介绍红黑树的概念,性质,红黑树和AVL树的比较,红黑树的插入相关函数的模拟实现。
2.红黑树的概念
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。
例:
如上图就是一颗典型的红黑树
3.红黑树的性质
知道了红黑树的概念之后,那么红黑树需要满足哪些性质才能够确保没有一条路径会比其他路径长出两倍呢?
红黑树的性质:
- 每个结点不是红色就是黑色
- 根节点是黑色的
- 如果一个节点是红色的,则它的两个孩子结点是黑色的
- 任意节点开始,从不同路径到叶子节点上的黑色节点数相同
- 每个叶子结点都是黑色的(此处的叶子结点指的是空结点)
思考:为什么满足上面的性质,红黑树就能保证:其最长路径中节点个数不会超过最短路径节点个数的两倍?
- 红黑树中的性质确保了任意路径上的黑色节点数量相等,这是红黑树能够保持平衡的关键。根据这个性质,我们可以证明红黑树的最长路径中的节点个数不会超过最短路径的节点个数的两倍。
- 假设红黑树的最短路径上的黑色节点数量为k。由于性质5,任意路径上的黑色节点数量相等,所以最长路径上的黑色节点数量不能少于k个。
- 现在我们来看最长路径上的节点个数。由于性质4,红色节点的两个子节点都是黑色的,因此最长路径上不能有连续的红色节点。而对于红黑树而言,最长路径上的红色节点数量最多为k,因为最长路径上的黑色节点数量不能少于k个。所以最长路径上的节点个数最多为2k,其中k个是黑色节点,k个是红色节点。
- 综上所述,红黑树的最长路径中的节点个数不会超过最短路径的节点个数的两倍,即最长路径上的节点个数最多为2k,其中k为最短路径上的黑色节点数量。
- 这个性质保证了红黑树的高度始终保持在较小的范围内,从而保持了树的平衡性。因为红黑树的高度与最长路径上的节点个数成正比,所以最长路径的节点个数的上限为最短路径的节点个数的两倍,确保了红黑树的平衡性和高效性。
4.红黑树和AVL树的比较
AVL树:
AVL树是一棵高度平衡的二叉搜索树,他是通过平衡因子来控制二叉搜索树的平衡的,当平衡因子的绝对值大于2时,那么就需要进行旋转了,在旋转的过程中是非常耗费时间的,尽管AVL树的查找的时间复杂度是LogN,但是对于插入来说,由于其需要严格的高度平衡,所以不断地通过旋转来调整二叉树,非常的浪费时间
红黑树:
红黑树是一棵相对平衡的二叉搜索树,他主要是根据最长路径上的节点个数不会超过最短路径上的个数的两倍,这就表明红黑树并不是高度平衡的,他有可能是平衡,也有可能是不平衡,但是由于他最长