树的结构(b,b+树)

无论线性表,栈还是队列,都是一对一,查询的时候,效率较低,数据量比较的大的情况

1.树的定义

一种数据结构,有层次关系的集合,根朝上,叶朝下

除了根节点外,每个子节点都有多个不想交的子树

父节点

子节点

兄弟节点

树根节点(根节点)

叶子节点

子树

空树

度:最大子树数,多少分支

层次(深度):第一层,第二次,以此类推,最大层数是4

森林:树多了

2.二叉树

树中包含的各个节点不能超过2,度不能超过2

二叉树衍生出满二叉树和完全二叉树,二叉树分为顺序存储的二叉树,基于链表存储的二叉树。

二叉排序树,平衡二叉树,赫夫曼树,红黑树,都是属于二叉树。

2.1二叉排序树,搜索树

比它小放它左边,比它大放右边。

查找复杂度较低,o(logn)

插入的数据总是比已有的数据大,子树会向一边切斜,树的层次变深,形成链表结构,出现了平衡二叉树。

2.2平衡二叉树

子树的高度不大于1,查询速度快,插入和删除慢,要进行旋转和平衡度计算。为了解决删除插入比较耗时,出现了红黑树

2.3红黑树

在平衡二叉树上增加了红色或黑色,增加了颜色属性

根节点和叶子节点是黑色,内部节点是红色和黑色较低,叶子节点必须是黑色,根节点只能是黑色。

从根节点走到空节点,所经过的黑节点的数目是相同的。

左旋和右旋,翻转颜色

AVL树和rb树的区别

3.多叉树

大规模数据存储,二叉树树的深度过深,导致查询效率低下,磁盘io读写过于频繁,导致查询效率低下,多叉树能够解决这个问题

b树,b+树

3.1 b-tree

b树适用于读写相对大的数据块的存储系统

每个节点可以存储超过2个元素,可以超过2的字节点

拥有AVL平衡树的特点

拥有二叉搜索树的特点

B树比较矮,分叉越多,树越矮,io次数较少,搜索性能较高。

三阶B树最多有3个分叉,四阶B树最多拥有4个分叉

一个节点最好凑够一个数据块的大小,凑够一个数据块的大小,直接写入磁盘。

一般4096b一个节点,因为一个磁道就4096b,但是不一定,根据你磁盘来弄。

3.2 b+tree

分为非叶子节点,叶子结点

内部节点只存储key,不存储值

叶子节点存储key和value具体数据,、

所有的叶子节点形成一个有序链表,排序和查询范围支持好。

b树的节点存储的元素个数是m,那么它的字节点数是m+1

b+比b树的优势,也是为什么mysql要选择b+树

b+存储更多的key,树的高度更低,时间复杂度越小,查询块

数据在叶子节点,每次都要到叶子节点,查询稳定,都是去第三层。

叶子节点构成链表结构,方便查询和排序

相关推荐

  1. MySQL数据结构B与B+区别

    2024-07-11 18:06:03       42 阅读
  2. 【数据结构

    2024-07-11 18:06:03       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 18:06:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 18:06:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 18:06:03       58 阅读
  4. Python语言-面向对象

    2024-07-11 18:06:03       69 阅读

热门阅读

  1. less和sass有啥区别哪个更加好

    2024-07-11 18:06:03       22 阅读
  2. 7.10飞书一面面经

    2024-07-11 18:06:03       25 阅读
  3. mysql bit 对gorm使用何种类型?

    2024-07-11 18:06:03       26 阅读
  4. python爬虫学习(三十三天)---多线程上篇

    2024-07-11 18:06:03       23 阅读
  5. 一、Python 日志系统设计之不同级别的系统日志

    2024-07-11 18:06:03       21 阅读