1 二叉排序树/二叉查找树/Binary Sort Tree

  • 1种对排序和查找都很有用的特殊二叉树
  • 叉排序树的弊端的解决方案:平衡二叉树
  • 二叉排序树必须满足的3条性质(或是具有如下特征的二叉树)
    • 若它的左子树不为空,则:左子树上所有结点的值< 它根结点的值
    • 若它的右子树不为空,则:右子树上所有结点的值 > 它根结点的值
    • 它的左子树、右子树也分别为二叉排序树(递归性)

(按照如上定义,即:

1 无键值相等的结点

2 中序遍历一颗二叉树时,可得一个结点值递增的有序序列)

2 平衡二叉排序树/Balanced Binary Tree/Adelson-Velskii & Landis

  • 1种结构平衡的二叉搜索树(即 叶节点高度差的绝对值不超过1)
  • 平衡因子:AVL树中左子树与右子树的深度之差只能为-1、0、1
  • AVL树的平衡调整方法:LL、RR、LR、RL(为了保证平衡,需付出一定代价)
  • 平衡二叉树的3条性质:(AVL树or空树,或是具有如下特征的二叉排序树(BST))
    • 左子树必须为平衡二叉树
    • 右子树必须为平衡二叉树
    • |左子树深度-右子树深度|≤1

3 B树


  • 1种平衡的多路搜索树,多用于文件系统、数据库的实现
  • 缺点
    • 在查询单条数据是非常快的。但如果范围查的话,b树每次都要从根节点查询一遍。
  • 提出者
    • 最早是由德国计算机科学家Rudolf Bayer等人于1972年在论文 《Organization and Maintenance of Large Ordered Indexes》提出的
  • 结点的结构图↓

  • 1棵m阶的B树,或为空树,或为满足下列特性的m叉树:

    • 若根结点不是叶子结点,则:有≥2棵子树
    • 树中每个结点有≤m棵子树 (m叉树的性质)
    • 所有的非终端结点有≤m-1个关键字。
    • 除根结点外的所有非终端结点有≥「m/2」棵子树
    • 所有的叶子结点都出现在同一层次上,并且不带信息(即 失败结点)

(实质上,失败结点并不存在,指向此类结点的指针为空,引入失败结点是为便于分析B树的查找性能)

4 B+树

  • 1种B树的变形树,更适合用于文件索引系统。
  • 实际应用:MySQL的存储引擎InnoDB/MyISAM均利用B+树建立索引。(MYSQL-Console:SHOW INDEX FROM tableName)
  • m阶B+树与m阶B树的差异
    • 含有n个关键字的结点必含有n棵子树;
    • 所有的【非叶子节点/非终端结点】:可看成是索引部分,结点中仅含有其子树(根结点)中的最大(或最小)关键字
    • 所有的【叶子结点/终端节点】:包含了全部关键字的信息,以及指向含这些关键字记录的指针,且叶子结点本身依靠关键字的大小自小而大顺序连接;

5 红黑树/平衡二叉B树

  • 别称:平衡二叉B树,1种自平衡的二叉搜索树
  • 实际应用:HashMap等Java的JDK源码实现
  • 红黑树必须满足的5条性质
    • 节点必为Red or Black
    • 根节点必为Black
    • 叶子节点必为Black
    • Red节点的子节点(父节点)必为Black (即 从根节点到叶子节点的所有路径上不能有2个连续的Red节点)
    • 从任一节点到叶子节点的所有路径都包含相同数目的Black节点
  • 比起AVL树(平衡二叉树),红黑树的特点↓

文献

[数据结构]二叉搜索树(BST) VS 平衡二叉排序树(AVL) VS B树(平衡多路搜索树) VS B+树 VS 红黑树(平衡二叉B树)的更多相关文章

  1. 数据结构中很常见的各种树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)

    数据结构中常见的树(BST二叉搜索树.AVL平衡二叉树.RBT红黑树.B-树.B+树.B*树) 二叉排序树.平衡树.红黑树 红黑树----第四篇:一步一图一代码,一定要让你真正彻底明白红黑树 --- ...

  2. JDK1.8 HashMap$TreeNode.balanceInsertion 红黑树平衡插入

    红黑树介绍 1.节点是红色或黑色. 2.根节点是黑色. 3.每个叶子节点都是黑色的空节点(NIL节点). 4 每个红色节点的两个子节点都是黑色.(从每个叶子到根的所有路径上不能有两个连续的红色节点) ...

  3. 树形结构_红黑树:平衡2X 哈夫曼树:最优2X

    红黑树:平衡2X 哈夫曼树:最优2X 红黑树 :TreeSet.TreeMap 哈夫曼树 1. 将w1.w2.…,wn看成是有n 棵树的森林(每棵树仅有一个结点): 2. 在森林中选出根结点的权值最小 ...

  4. 数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)

    树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: BST树 ...

  5. 【数据结构05】红-黑树基础----二叉搜索树(Binary Search Tree)

    目录 1.二分法引言 2.二叉搜索树定义 3.二叉搜索树的CRUD 4.二叉搜索树的两种极端情况 5.二叉搜索树总结 前言 在[算法04]树与二叉树中,已经介绍过了关于树的一些基本概念以及二叉树的前中 ...

  6. Red Black Tree 红黑树 AVL trees 2-3 trees 2-3-4 trees B-trees Red-black trees Balanced search tree 平衡搜索树

    小结: 1.红黑树:典型的用途是实现关联数组 2.旋转 当我们在对红黑树进行插入和删除等操作时,对树做了修改,那么可能会违背红黑树的性质.为了保持红黑树的性质,我们可以通过对树进行旋转,即修改树中某些 ...

  7. 算法设计和数据结构学习_5(BST&AVL&红黑树简单介绍)

    前言: 节主要是给出BST,AVL和红黑树的C++代码,方便自己以后的查阅,其代码依旧是data structures and algorithm analysis in c++ (second ed ...

  8. 二叉排序树、平衡二叉树、B树&B+树、红黑树的设计动机、缺陷与应用场景

    之前面试时曾被问到"如果实现操作系统的线程调度应该采用什么数据结构?",因为我看过ucore的源码,知道ucore是采用斜堆的方式实现的,可以做到O(n)的插入.O(1)的查找.我 ...

  9. 单例模式,堆,BST,AVL树,红黑树

    单例模式 第一种(懒汉,线程不安全): public class Singleton { private static Singleton instance; private Singleton () ...

  10. BST&AVL&红黑树简单介绍

    (BST&AVL&红黑树简单介绍) 前言: 节主要是给出BST,AVL和红黑树的C++代码,方便自己以后的查阅,其代码依旧是data structures and algorithm ...

随机推荐

  1. 因为更新了ipykernel 导致 VS Code 中Jupyter 一直处于连接状态的 解决办法

    重新安装VS Code 当中的Jupyter插件即可(我选择的是upgrade当前的jupyter插件)

  2. Android studio 使用Internet传递信息

    使用Intent在Activity之间传递信息1.首先创建一个新的Activity,在activity_main.xml中设计页面,将android.support.constraint.Constr ...

  3. sar与ksar使用显示监控数据

    一.Ksar: 1)下载ksar地址:https://github.com/vlsi/ksar/releases/tag/v5.2.4-snapshot.10-gf068072 2)启动:java - ...

  4. Linux_Shell脚本

    Shell脚本 shell基础 shell变量 shell扩展 shell基础 shell简介 1.什么是shell? shell是一种命令解释器 shell也是一种编程语言 shell,python ...

  5. spring-security-oauth2使用遇到的坑

    异常信息为 2021-08-22 14:24:11.086 WARN 17812 --- [ main] ConfigServletWebServerApplicationContext : Exce ...

  6. Vue+SSM+Element-Ui实现前后端分离(2)

    前言:后台使用ssm搭建,对以前学习知识的一个回顾,与此同时来发现自己不足.这里主要采用配置文件方式进行,有部分注解. 目标:搭建ssm框架,并测试成功:(其中也有aop切面的编写) 一.开发工具 I ...

  7. MySql 在 Linux 下的安装与基础配置

    使用版本:Mysql (5.7) Linux(CentOS 7.2) 1.安装 1)下载MySQL官方的 Yum Repository wget -i -c http://dev.mysql.com/ ...

  8. 《Unix/Linux系统编程》第十周学习笔记

    <Unix/Linux系统编程>第十周学习笔记 块设备I/O和缓冲区管理 解释块设备I/O的原理和I/O缓冲的优点 I/O缓冲区:内核中的一系列NBUF缓冲区用作缓冲区缓存.每个缓冲区用一 ...

  9. 2022.07.13 vue3下pinia的简单使用及持久化

    使用前说明: 当前demo使用了vue3 + vite + typescript + pinia搭建的简单项目,主要介绍了在单文件组件(sfc)基础上使用pinia的用法,懒得看api的兄弟们,来这瞅 ...

  10. Hash中的bucket什么意思?

    这个好理解.无序容器的内部是由一个个的bucket(桶)构成的,每个bucket里面由相同hash的元素构成. 因此无序容器的搜索是先根据hash值,定位到bucket,然后再在bucket里面搜索符 ...