二叉树、二叉查找树、平衡树和红黑树概念及其性质

这篇具有很好参考价值的文章主要介绍了二叉树、二叉查找树、平衡树和红黑树概念及其性质。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  在所有的树结构,基本上都遵循左小右大的原则。本文分享二叉树、二叉查找树、平衡树和红黑树概念及其性质。

二叉树

  二叉树(Binary Tree)是指每个节点最多只有两个分支的树结构(即不存在分支大于 2 的节点),如下图所示:

二叉树、二叉查找树、平衡树和红黑树概念及其性质

  这是一棵拥有 6 个节点深度为 2(深度从 0 开始),并且根节点为 3 的二叉树。二叉树的左右两个分支通常被称作左子树和右子树,而且这些分支左右次序不能随意地颠倒。

二叉查找树

  二叉查找树是一种特殊结构的二叉树,可以非常方便地对树中所有节点进行排序和检索。 一棵空树或者满足以下性质的二叉树被称之为二叉查找树(Binary Search Tree),也被称为二叉搜索树、有序二叉树(Ordered Binary Tree)或排序二叉树(Sorted Binary Tree)等。

  (1)若任意节点的左子树不为空,则左子树上所有节点的值均小于它的根节点的值;

  (2)若任意节点的右子树不为空,则右子树上所有节点的值均大于或等于它的根节点的值;

  (3)任意节点的左、右子树都是二叉查找树。

  一棵标准的二叉查找树:

二叉树、二叉查找树、平衡树和红黑树概念及其性质

  排序二叉树的数据操作效率:

  1. 查找效率最好为O(log n)、最坏为O(n);
  2. 插入效率和查找效率相同(先查找插入的位置,且只插入到叶子节点);
  3. 删除效率最好为O(log n) + O(1)(只有左或者右子树),最坏为O(log n) + O(log n)(只有左右子树同时存在)。

平衡二叉树

  又称作AVL树。它是一棵空树或它的左右两棵子树高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这样的好处就是可以减少二叉查找树的深度。

  平衡二叉树牺牲了插入和删除数据的代价,但是提高了查询效率(稳定查询效率为O(log n))。

红黑树

  关于红黑树的性质,它在排序二叉树基础上增加了如下几个要求:

  性质 1:每个节点要么是红色,要么是黑色。
  性质 2:根节点永远是黑色的。
  性质 3: 所有叶子都是黑色的空节点(NIL 节点);
  性质 4:每个红色节点的两个子节点都是黑色。
  性质 5:从任一节点到其子树中每个叶子节点的路径都包含相同数量的黑色节点。

  红黑树结构如下图所示:

二叉树、二叉查找树、平衡树和红黑树概念及其性质

红黑树的优势

  红黑树的优势在于它是一棵平衡二叉查找树,普通的二叉查找树(非平衡二叉查找树)在极端情况下可能会退化为链表的结构,例如,当我们依次插入 3、4、5、6、7、8 这些数据时,二叉树会退化为如下链表结构:

二叉树、二叉查找树、平衡树和红黑树概念及其性质

  当二叉查找树退化为链表数据结构后,再进行元素的添加、删除以及查询时,它的时间复杂度就会退化为 O(n);而如果使用红黑树的话,它就会将以上数据转化为平衡二叉查找树,这样就可以更加高效的添加、删除以及查询数据了,这就是红黑树的优势。红黑树的高度近似 log2n,它的添加、删除以及查询数据的时间复杂度为 O(logn)。自平衡的红黑树

  红黑树通过变色和旋转操作来维护红黑树的规则,变色就是让黑节点变成红的,红的变成黑的,旋转又分为“左旋转”和“右旋转”。这个比较复杂,容易晕,我们就只要知道红黑树就是通过这种方式来实现它的自平衡性就行了。

B树(平衡多路查找树)

  在学习二叉树和平衡二叉树的过程中,我们发现,每个节点上只存储了一个元素,当有100个元素需要储存时,在二叉树及平衡二叉树中,会产生100个节点。如果让一个节点存储多个元素,那么,是不是可以减少节点,从而减少树整体层级高度呢?要知道,减少树高度的过程,就是优化查询效率的过程。

  于是,B树就出现了,B树与平衡二叉树相似,不同的是B树属于多叉树,又名平衡多路查找树,顾名思义,就是每个节点上可以存储多个元素的树。与平衡二叉树不同的是,B树所有的叶子节点都处于同一层级,不存在层级高度差的问题。数据库索引技术里大量使用B树和B+树这两种数据结构。

  一棵n阶的B-Tree有如下特性:

  1. 若根节点不是叶子节点,则至少有2个子节点 ;
  2. 每个非根节点包含的关键字个数m满足:n/2 - 1 < m < n -1;
  3. 除根节点以外,树的维纳指标正好是关键字的总数+1,即除根节点以外的所有节点(不包括叶子节点)的度数正好是关键字的总数+1,故内部子树个数k满足:n/2 < k < n -1;
  4. 所有叶子节点都位于同一层,且不包含其它关键字信息。
  5. 每个节点既保存索引,又保存数据。

MongoDB使用B-树,所有节点都有Data域,而且不需要进行范围查找,只要找到指定索引就可以进行访问,无疑单次查询平均快于Mysql。

B+树

  B+树是一个n叉树,是B树的扩展,每个节点通常都有多个孩子,一颗B+树包含根节点、内部节点和叶子节点。内部节点又称为索引节点。

B+树的特征如下:

  1. 非叶子节点不存放数据,只存放keys;

  2. 叶子节点之间存在指针相连,而且是单链表;

  3. 有n个子树的节点含有n个关键字;

  4. 所有叶子节点包含了全部关键字的信息,以及指向这些关键字记录的指针,且叶子节点本身依赖关键字的大小,即自小而大顺序连接;

  5. 所有的非终端节点可以看成索引的一部分,节点中包含了其它子树的最大或最小关键字。

二叉树、二叉查找树、平衡树和红黑树概念及其性质

其实,B+树是二叉搜索树的扩展,二叉搜索树是每次一分为二,B+ 树是每次一分为多。B+树相对于B树而言,提升了插入、删除和查找的效率。

Mysql作为一个关系型数据库,数据的关联性是非常强的,区间访问是常见的一种情况,B+树由于数据全部存储在叶子节点,并且通过指针串在一起,这样就很容易的进行区间遍历甚至全部遍历。文章来源地址https://www.toymoban.com/news/detail-711252.html

Reference

  • https://www.cnblogs.com/liaowenhui/p/13944927.html
  • https://www.jianshu.com/p/ae9387682c11
  • https://zhuanlan.zhihu.com/p/52127386
  • https://www.javatpoint.com/b-plus-tree

到了这里,关于二叉树、二叉查找树、平衡树和红黑树概念及其性质的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ONE·C++ || set和map(二):AVL树和红黑树】

      主要介绍AVL树和红黑树的部分框架结构和特性             1)、AVL树是什么   AVL树实际是对二叉搜索树的特化,又被称为高度平衡二叉搜索树。    二叉搜索树问题说明: 数据有序或接近有序时,二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索

    2024年02月03日
    浏览(31)
  • 数据结构——常见二叉树的分类(完全二叉树、满二叉树、平衡二叉树、二叉搜索树、红黑树)

    专业术语 中文 描述 Root 根节点 一棵树的顶点 Child 孩子结点 一个结点含有的子树的根节点称为该结点的子节点 Leaf 叶子结点 没有孩子的节点 Degree 度 一个节点包含子树的数量 Edge 边 一个节点与另外一个节点的连接 Depth 深度 根节点到这个节点经过边的数量 Height 节点高度 从

    2024年02月03日
    浏览(35)
  • 【数据结构】二叉查找树和平衡二叉树,以及二者的区别

    目录 1、二叉查找树 1.1、定义  1.2、查找二叉树的优点  1.2、查找二叉树的弊端 2、平衡二叉树 2.1、定义 2.2、 实现树结构平衡的方法(旋转机制) 2.2.1、左旋 2.2.2、右旋 3、总结        二叉查找树又名二叉排序树,亦称二叉搜索树。是每个结点最多有两个子树的树结构

    2024年02月20日
    浏览(38)
  • 数据结构之进阶二叉树(二叉搜索树和AVL树、红黑树的实现)超详细解析,附实操图和搜索二叉树的实现过程图

    绪论​ “生命有如铁砧,愈被敲打,愈能发出火花。——伽利略”;本章主要是数据结构 二叉树的进阶知识,若之前没学过二叉树建议看看这篇文章一篇掌握二叉树,本章的知识从浅到深的 对搜索二叉树的使用进行了介绍和对其底层逻辑的实现进行了讲解 ,希望能对你有所

    2024年02月04日
    浏览(36)
  • 搜索二叉树 | 红黑树 | 验证是否为红黑树 | 代码实现

    黑红树是一颗特殊的搜索二叉树,本文在前文的基础上,图解红黑树插入:前文 链接,完整对部分关键代码展示,完整的代码在gitee仓库中: 链接 文章中有错误的地方,欢迎大家指正!如果有帮助到你,也请多多点赞支持! 1.红黑树的概述 平衡二叉树要求左右子树的高度差

    2024年02月21日
    浏览(32)
  • 数据结构之二叉树和平衡二叉树

    1、二叉树: 2、平衡二叉树:

    2024年04月17日
    浏览(34)
  • C语言-实现顺序二叉树和平衡二叉树AVL

    在实现二叉树之前先看下结构体的一些使用方法 数组是保存一系列相同的数据。在实际问题中,一组数据往往有很多种不同的数据类型。例如,登记学生的信息,可能需要用到 char型的姓名,int型或 char型的学号,int型的年龄 访问结构成员 访问其中的各个元素,用结构成员运

    2023年04月14日
    浏览(26)
  • 【数据结构】二叉树---红黑树的实现

    目录 一.  红黑树的概念及性质 二.  红黑树结点结构的定义 三.  红黑树的插入操作      1. 情况一      2. 情况二        3. 情况三 四.  红黑树的验证 五.  红黑树与AVL树的比较 红黑树是一种自平衡的二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,

    2024年03月21日
    浏览(37)
  • 二叉树、红黑树、B树、B+树

    一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。 二叉树的 特点 : 每个结点最多有两棵子树,即二叉树不存在度大于2的结点。 二叉树的子树有左右之分,其子树的次序不能颠倒。 满二叉树:二叉树的

    2024年02月11日
    浏览(31)
  • (浙大陈越版)数据结构 第三章 树(中) 二叉搜索树和平衡二叉树

    目录 4.1.1 二叉搜索树及查找 什么是二叉搜索树 定义 二叉搜索树特殊函数集: 查找操作:Find 算法思想 代码实现 补:查找最大和最小元素 4.1.2 二叉搜索树的插入 插入操作:Insert 算法思想 代码实现 例题 4.1.3 二叉搜索树的删除 删除操作:delete 算法思想 情况1:删除叶节点

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包