关于二叉树 平衡二叉树 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+树适合数据库磁盘存储和索引需求。
