浅谈数据结构--红黑树

浅谈数据结构–树(1)
浅谈数据结构–二叉查找树(2)

前两篇文章介绍了树、二叉树、二叉搜索树。其中二叉查找树(二叉搜索树)最为常见,但是二叉树在动态更新的过程中会导致左右子树不平衡。在极端的情况下二叉搜索树会退化为链表,时间复杂度从O(logn)退化为O(n)。为了解决这个问题,一种新的树–平衡二叉查找树(BST)出现了,而红黑树是最长用的一种平衡二叉查找树。

1、平衡二叉查找树

平衡二叉树
在这里插入图片描述
非平衡二叉树
在这里插入图片描述
何为平衡二叉树呢?我们首先来看一下它的定义:二叉树中任意一个节点的左右子树的高度相差不能大于1。但是很多平衡二叉查找树并没有严格符合上面的定义,比如红黑树,它从根节点到各个叶子节点的最长路径,有可能会比最短路径大一倍。对于定义我们只需了解就好了,不必深究。平衡二叉树的出现是为了解决普通的二插查找树在频繁的更新过程中出现的复杂度退化的问题。所以“平衡”的意思是指,左子树和右子树看起来比较对称,不要出现左右子树的高度相差过大,这样可以有效的降低插入、删除、查找的时间。

2、定义红黑树

红黑树(Red Black Tree),其中有两类节点,一类被标记为红色,另一类被标记为黑色,并且还满足一下几点要求:

  • 根节点为黑色
  • 每个叶子节点都是黑色的空节点,也就是说,叶子节点不存储数据
  • 任何相邻的节点都不能同时为红色,即红色节点要被黑色节点隔开
  • 每个节点,从根节点到达其可达叶子节点的所有路径,都包含相同数目的黑色节点

在这里插入图片描述
前面讲到,平衡二叉树的查找初衷是为了解决动态更新导致的时间复杂度退化的问题。平衡的意思可以理解为性能不退化,近似平衡就等价于性能不会退化的太严重。
那么,该如何证明红黑树近似平衡呢,我们只需要分析红黑树的高度是否比较稳定的趋近于log2n就行。首先,我们来看,如果将红色节点从红黑树中去掉,那么单纯的包含黑色节点的红黑树高度是多少呢?
在这里插入图片描述
如上图所示,红色节点删除之后,把之前红色节点的子节点合并到红色节点的父节点上,之前的二叉树就变成了三叉树。由于三叉树的高度要比包含相同数目节点的二叉树的高度要低,所以去掉红色节点的黑树的高度不会超过log2n。根据红黑树的要求,两个红色节点要被一个黑色节点隔开,所有如果把红色节点加进去,时间复杂度也不会超过2log2n。所以虽然时间复杂度相比于高度平衡的二叉树扩大了一杯,但是总体性能上来讲依旧是对数级别的时间复杂度。

红黑树是一种平衡二叉查找树,时间复杂度近似等于log2n,所以插入、删除、查找操作也近似为O(logn)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值