Java基础——红黑树的产生

红黑树是如何产生的呢?

我们先来看看红黑树的亲戚

二叉排序树

又叫二叉查找树和二叉搜索树

定义

  • 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 左、右子树也分别为二叉排序树;
  • 没有键值相等的结点。

查找算法

与二分法类似,将查找的关键字与树结点进行对比,大的往右小的往左,相同则成功查找。

步骤:

  1. 若根结点的关键字值等于查找的关键字,成功。
  2. 否则,若小于根结点的关键字值,递归查左子树。
  3. 若大于根结点的关键字值,递归查右子树。
  4. 若子树为空,查找不成功。

时间复杂度 O

  • 平衡情况下,n个结点的二叉排序树的高度为logN+1,时间复杂度为O(logn),近似于二分法查找
    在这里插入图片描述
  • 不平衡情况下,其深度可达到n,时间复杂度为O(n),这时的二叉树则退化为线性表
    在这里插入图片描述

为了解决二叉排序树退化成链表的问题,延伸出两种树:平衡二叉树、红黑树

平衡二叉树

​ 它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

弊端: 过分追求平衡,理想状态,现实中实现的意义不大。

红黑树

  1. 节点是红色或黑色。

  2. 根节点是黑色。

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

  4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)

  5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

在这里插入图片描述

这些约束强制了红黑树的关键性质:

  • 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长
  • 红黑树的树高(h)不大于两倍的红黑树的黑深度(bd),即h<=2bd
  • 一棵拥有n个内部结点(不包括叶子结点)的红黑树的树高h<=2log(n+1)

红黑树的操作

  • 因为每一个红黑树也是一个特化的二叉排序树,因此红黑树上的查找操作与普通二叉查找树上的查找操作相同。然而,在红黑树上进行插入操作和删除操作会导致不符合红黑树的性质。

  • 恢复红黑树的属性需要少量(O(log n))的颜色变更(实际是非常快速的)和不超过三次树旋转(对于插入操作是两次)。 虽然插入和删除很复杂,但操作时间仍可以保持为 O(log n) 次 。

红黑树的优势

红黑树能够以O(log2(N))的时间复杂度进行搜索、插入、删除操作。此外,任何不平衡都会在3次旋转之内解决。这一点是AVL所不具备的。

红黑树的恢复(自平衡)

红黑树恢复过程较为复杂,情况多种多样,主要的操作有三种:

  1. 颜色变换
  2. 左旋
  3. 右旋

在此就不过多介绍实现方法了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值