指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
关于二叉树 平衡二叉树 b树
1. 什么是二叉树?
  • 二叉树是一种 每个节点最多有两个子节点(左子节点和右子节点) 的数据结构。
  • 树结构用于存储层级关系,支持快速查找、插入和删除。
特点:
  • 每个节点最多有两个子节点。
  • 没有其他要求。

2. 什么是平衡二叉树?
  • 平衡二叉树是一种特殊的二叉树,保证左子树和右子树的高度差不超过1。
  • 这样保证了树的高度尽可能低,避免退化成链表,查找效率高。
常见的平衡二叉树:
  • AVL树
  • 红黑树

3. MySQL 中的树结构

MySQL 中用到的数据结构主要是:

B+ 树(B树的变种)
  • MySQL InnoDB 的索引底层实现用的是 B+ 树,而不是简单的二叉树。
  • B+ 树是一种多路平衡查找树,节点可以有多个子节点。
  • 优点是适合磁盘存储,减少磁盘IO次数。
  • 叶子节点中存储了所有的实际数据(InnoDB聚簇索引),非叶子节点存储索引。
为什么不用平衡二叉树?
  • 二叉树的高度会比较高,不利于磁盘IO。
  • B+ 树的多路分支大大减少了树的高度,使得查询更快。
  • 由于数据库存储在磁盘上,B+树的设计更加符合磁盘块存储的特点。

4. 区别总结
结构二叉树平衡二叉树B+树(MySQL索引底层)
每个节点子节点数最多2个最多2个多个子节点
是否平衡不一定保证平衡(左右子树高度差≤1)保证平衡
适合场景内存中简单结构内存中需快速查找磁盘存储、数据库索引
叶子节点数据可以存,也可以不存可以存,也可以不存叶子节点存所有数据
查找效率可能退化到O(n)O(log n)O(log n),更适合磁盘IO

5. 简单示意图
二叉树示意
     10
    /  \
   5    20
  / \
 3   7

平衡二叉树(AVL)

同样结构,但保证左右子树高度差 ≤ 1


B+树(简化示意)
          [10 | 20]
        /     |      \
  [1..9]   [11..19]  [21..30]
叶子节点存储所有数据

6. 总结
  • MySQL 实际用的是B+树,不是简单的二叉树或平衡二叉树。
  • 平衡二叉树主要用于内存中数据结构(如红黑树在某些缓存或内存索引中)。
  • 二叉树是基础概念,平衡二叉树是它的优化版本。
  • B+树适合数据库磁盘存储和索引需求。