算法笔记-红黑树1

上一篇总结中二叉查找树支持快速查找,删除以及插入操作,时间复杂度与树的高度成正比,理想情况下是 O(logn)。

但是在频繁插入删除的情况下,树的高度可能就大于 log2|n。极端情况下,树可以退化成链表这种结构,那么相应的操作效率也就下降了。

针对这种情况,为了保持二叉查找树的执行效率高效,出现了平衡二叉查找树,其中最广为人知的就是红黑树。

什么是平衡二叉查找树

二叉树中任意节点的左右子树的高度相差不超过 1。完全二叉树,满二叉树都是平衡二叉树。
举例如下:
在这里插入图片描述

平衡二叉查找树不仅满足平衡二叉树的特点,也满足二叉查找树的特点。最先被发明的平衡二叉查找树就是 AVL树。

但是,很多平衡二叉查找树并没有严格的遵守平衡二叉树的定义。比如红黑树,从根节点到叶子节点的最长路径可能是最短路径的二倍。

对于平衡二叉查找树的理解,王争老师给出了下面的解释:平衡二叉查找树的出现,就是为了解决二叉查找树频繁删除插入操作,出现时间复杂度退化的问题,所以,平衡二叉查找树只要保证树看起来相对平衡,相对对称,数的高度不大于 log2|n 就可以称之为平衡二叉查找树。如此,查找删除以及插入操作是效率就会高一些。

定义一个平衡二叉查找树

Splay Tree(伸展树),Treap(树堆) 都是平衡二叉查找树,接下来总结一个常见的平衡二叉查找树:红黑树。

红黑树是一种不严格的平衡二叉查找树,在树分为红色节点和黑色节点。红黑树还需要满足以下几点:
1:根节点是黑色的。
2:每个叶子节点都是黑色的空节点,叶子节点不存值。
3:任何相邻的节点都不能是红色节点,红色节点被黑色节点隔开。
4:每个节点,从该节点到可达节点经过的黑色节点个数相同。
图例如下:
在这里插入图片描述

红黑树高度分析

首先,将红黑树中的红色节点去除,那么它们的子节点就没有父节点了,我们将这些子节点指向它们的父节点。之前的二叉树就变成了四叉树,图例如下:
在这里插入图片描述

从四叉树中取出两个节点,放在叶子节点位置,这棵树就变成了完全二叉树,它的高度就是近似 log2|n。四叉树要比这个完全二叉树低,所以四叉树的高度肯定不会高于 log2|n。

现在,将红色节点加到四叉树中。由于红色节点必须被黑色节点隔开,所以一个红色节点最少对应一个黑色节点。那么单纯只有黑色节点的二叉树高度不会高于 log2|n,那么加入红色节点后,树的高度不会高于 2log2|n。所以,红黑树的高度近似 2log2|n。

对比高度平衡的 AVL树的高度,红黑树的高度顶多是它的二倍,性能上下降的不多。实际中,红黑树的效率要高于 AVL树。

总结

红黑树是一种最难掌握的数据结构,更难的是它的实现。但是王争老师一直给我们普及一种观念:我们学习数据结构和算法,主要是学习它的特性,由来以及实适用的场景和它能解决的问题。对于红黑树,只要掌握了这些就足够了。

本文创作灵感来源于 极客时间 王争老师的《数据结构与算法之美》课程,通过课后反思以及借鉴各位学友的发言总结,现整理出自己的知识架构,以便日后温故知新,查漏补缺。

初入算法学习,必是步履蹒跚,一路磕磕绊绊跌跌撞撞。看不懂别慌,也别忙着总结,先读五遍文章先,无他,唯手熟尔~
与诸君共勉

关注本人公众号,第一时间获取最新文章发布,每日更新一篇技术文章。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值