二叉搜索树

满足以下条件:

  1. 对于根节点,左子树中所有节点的值 < 根节点的值 < 右子树中所有节点的值。
  2. 任意节点的左、右子树也是二叉搜索树,即同样满足条件 1.

这是一个正常的,没有碰到极端情况的二叉搜索树。

如果数据是有序的或者在删除,插入操作下,那么可能会退化成一条链。严重影响性能。

平衡二叉搜索树(AVL)

在这种情况下可以通过不同的旋转操作来保证树的平衡。

  • “节点高度”是指从该节点到它的最远叶节点的距离,即所经过的“边”的数量。
  • 节点的平衡因子(balance factor)定义为节点左子树的高度减去右子树的高度,同时规定空节点的平衡因子为 0 。
  • 我们将平衡因子绝对值 >1 的节点称为“失衡节点”

旋转

旋转操作是为了将二叉树重新平衡。

在插入或删除的时候,如果节点失衡,平衡因子的绝对值只能是2。

57 是失衡节点。它们失衡是因为 1 的存在,从节点 51 有两条边,这是罪魁祸首,只要把 3 作为 15 的父节点就好了。

但是为什么不把 5 作为 37 的父节点呢?找离新插入的节点最近的不平衡的树进行调整

为什么要这么操作呢?

  • AVL树的平衡性是递归定义的。每个节点的左右子树高度差不能超过1。

  • 如果只调整离新插入节点最近的不平衡节点,可以确保该节点的子树恢复平衡,同时更高层的节点也会因为子树高度的调整而自动满足平衡条件。

  • 如果跳过最近的不平衡节点,直接调整更高层的节点,可能会导致低层节点再次失衡,从而需要额外的调整。

    对于其它的旋转操作来说,都是为了保证 AVL 树的性质不变。

红黑树

  • 特性1:节点非黑即红

  • 特性2:根节点一定是黑色

  • 特性3:叶子节点(NIL)一定是黑色

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

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

    从以上性质可以知道左右子树的高度差最大的时候是黑红相间,这样的规定使得调整平衡的操作相对于 AVL 比较少。

插入

  • 规定插入的节点是红节点,如果是黑节点一定破坏了 特性5,而红节点有可能破坏 特性4.

叔叔为红

只好将 7 变红,39 变黑,同时将注意力放到 7 上递归向上。

叔叔为黑

只需要保证这棵子树的父节点为黑,并满足上述性质。

3 变黑,通过旋转,变为父节点,7 变红。

删除

  • 如果是红色节点没有任何问题直接删除,如果是黑色节点则必定会违反 特性5.

    如果删除后,将兄弟子树也去掉一个黑色节点,就要将注意力转移到它们的父节点上,递归向上。



    删掉 93 变红,压力给到 7.

    如果要保持黑节点不变,就要旋转加变色,来保证红黑树的性质。

B树

可以知道的是上述 AVL 树和红黑树的高度较高,如果数据量较大的情况下,数据在硬盘上,访问一个节点时要进行一次硬盘操作。树高度和访问硬盘的操作正相关。所以我们要压缩树的高度,增加每个节点数据量。

  • 平衡:所有叶节点都在同一层。
  • 有序:节点内有序,任意元素的左子树小于它,右子树大于它。
  • 对于m阶B树,节点最多有m个分支,m-1个元素。对于根节点,最少2个分支,一个元素,非根 $[m/2]$ 个分支,$[m/2] -1$个元素。



    B树的插入删除操作和二叉搜索树的相似同时要满足节点最少和节点最大的条件,就不过多讨论。

B+树

  • 与B树的不同:对于m阶B树,节点最多有m个分支,m个元素。对于根节点,最少2个分支,两个个元素,非根 $[m/2]$ 个分支,$[m/2]$个元素。



    B树在顺序遍历的时候只能中序遍历,远没有B+树链式遍历的快。同样的 B+树也可以很方便的进行随机查找。

红黑树和b+树的更多相关文章

  1. Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结

    Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结 1.1. 树形结构-- 一对多的关系1 1.2. 树的相关术语: 1 1.3. 常见的树形结构 ...

  2. 红黑树、B(+)树、跳表、AVL等数据结构,应用场景及分析,以及一些英文缩写

    在网上学习了一些材料. 这一篇:https://www.zhihu.com/question/30527705 AVL树:最早的平衡二叉树之一.应用相对其他数据结构比较少.windows对进程地址空间 ...

  3. 红黑树和AVL树的实现与比较-----算法导论

    一.问题描述 实现3种树中的两种:红黑树,AVL树,Treap树 二.算法原理 (1)红黑树 红黑树是一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是red或black.红黑树满足以 ...

  4. B树,B+树,红黑树应用场景AVL树,红黑树,B树,B+树,Trie树

    B B+运用在file system database这类持续存储结构,同样能保持lon(n)的插入与查询,也需要额外的平衡调节.像mysql的数据库定义是可以指定B+ 索引还是hash索引. C++ ...

  5. 红黑树与AVL树

    概述:本文从排序二叉树作为引子,讲解了红黑树,最后把红黑树和AVL树做了一个比较全面的对比. 1 排序二叉树 排序二叉树是一种特殊结构的二叉树,可以非常方便地对树中所有节点进行排序和检索. 排序二叉树 ...

  6. AVL树与红黑树(R-B树)的区别与联系

    AVL树(http://baike.baidu.com/view/593144.htm?fr=aladdin),又称(严格)高度平衡的二叉搜索树.其他的平衡树还有:红黑树.Treap.伸展树.SBT. ...

  7. 1.红黑树和自平衡二叉(查找)树区别 2.红黑树与B树的区别

    1.红黑树和自平衡二叉(查找)树区别 1.红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单. 2.平衡 ...

  8. 二叉树、红黑树、伸展树、B树、B+树

    好多树啊,程序猿砍树记,吼吼. 许多程序要解决的关键问题是:快速定位特定排序项的能力. 第一类:散列 第二类:字符串查找 第三类:树算法 树算法可以在辅助存储器中存储大量的数据. 二叉树.红黑树和伸展 ...

  9. AVL树,红黑树,B-B+树,Trie树原理和应用

    前言:本文章来源于我在知乎上回答的一个问题 AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中? 看完后您可能会了解到这些数据结构大致的原理及为什么用在这些场景,文章并不涉及具体操作 ...

  10. B树、B+树、红黑树、AVL树

    定义及概念 B树 二叉树的深度较大,在查找时会造成I/O读写频繁,查询效率低下,所以引入了多叉树的结构,也就是B树.阶为M的B树具有以下性质: 1.根节点在不为叶子节点的情况下儿子数为 2 ~ M2. ...

随机推荐

  1. 【原创】利用gitlab多项目自动部署到多个网站目录,自动同步更新,不用插件,重写钩子

    原创内容,分享请保留链接. 0.首先在服务器安装gitlab,网上一堆过程省略 1.建几个空仓库admin.web.xxxx等(1个仓库也行).确保每个仓库名称和网站名称要有一致性,比如仓库叫admi ...

  2. [Symfony\Component\Process\Exception\RuntimeException] The Process class relies on proc_open, which is not available on your PHP installation.

    [Symfony\Component\Process\Exception\RuntimeException] The Process class relies on proc_open, which ...

  3. FluentAssertions:C#单元测试断言库,让测试代码更加直观、易读!

    推荐一个C#开源库,用于单元测试中的断言,它提供了一系列的扩展方法,使得单元测试的断言看起来更加自然流畅. 01 项目简介 FluentAssertions 是一个基于 .NET 的断言库,它提供了一 ...

  4. 即时通讯技术文集(第19期):IM架构设计基础知识合集 [共13篇]

    为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第19 期. [-1-] 微信后台基于时间序的新一代海量数据存储架构的设计实践 [链接] htt ...

  5. Canal同步MySQL增量数据

    引言 在现在的系统开发中,为了提高查询效率 , 以及搜索的精准度, 会大量的使用 redis .memcache 等 nosql 系统的数据库 , 以及 solr . elasticsearch 类似 ...

  6. javaIO类--File类

    -------------------- File类 是对文件系统中文件以及目录(文件夹)进行封装的对象,可以通过面向对象的思想来操作文件和目录(文件夹).File类保存文件或目录的各种元素的信息,包 ...

  7. 网站架构核心技disruptor

    一 序:本章业务场景:队列在数据结构中是一种线性表,从一端插入数据,然后从另一端删除数据.作者举例的场景有:进行异步处理.系统解耦.数据同步.流量削峰.缓冲.限流等. 前面的比较浅,总结起来,核心知识 ...

  8. uni-app在小程序上遇见的坑(a-b页面频繁跳转)

    功能描述 uni-app在小程序中. A页面跳B页面.B页面在调A页面.这样来回跳转. 多调几次,会有问题的. 出现的问题是,调不动了. 因为 这个方法是 uni.navigateTo 保留当前页.( ...

  9. oracle开启了审计功能,导致sysaux表空间满的问题

    查询是否开启审计功能 SQL> show parameter audit 如下图所示: AUDIT_TRAIL参数用于指定数据库审计跟踪信息的记录方式.它接受三个可能的参数:NONE,DB,OS ...

  10. 镇海-APIO联合总结

    镇海考试见此处:https://www.cnblogs.com/british-union/p/liankao.html 考的是湖南省队集训,除了第一天有点头昏导致体验很差之外体验非常好,剩下两次考试 ...