【什么是二叉树?什么是二叉堆?】
二叉树 = 大家族
二叉堆 = 二叉树里的一种特殊“规矩树”
1. 二叉树是什么?
就是每个节点最多只有两个孩子的树:
- 左孩子
- 右孩子
长这样:
A / \ B C / \ D E没有任何其他规则!
只要每个节点 ≤2 个孩子,就叫二叉树。
2. 二叉堆是什么?
二叉堆 = 满足两个特殊规则的完全二叉树
它必须同时满足:
- 是完全二叉树(除了最后一层,前面全满,最后一层靠左排满)
- 堆序性质:
- 大顶堆:父节点 ≥ 子节点
- 小顶堆:父节点 ≤ 子节点
所以:
**二叉堆一定是二叉树
但二叉树不一定是二叉堆**
3. 最直观的区别
- 二叉树:只限制最多两个孩子
- 二叉堆:限制结构 + 大小关系,是有序、可用来快速找最大/最小值的工具
4. 二叉堆用来干嘛?
- 快速取最大值 / 最小值O(1)
- 插入、删除 O(log n)
- 堆排序
- TopK 问题
- 优先级队列(Java 里的 PriorityQueue 底层就是二叉堆)
5. 超级好理解的比喻
- 二叉树 = 普通家庭,最多生两个孩子
- 二叉堆 = 纪律严明的家庭,爸爸一定比儿子大(或小),而且排队必须靠左站
6.图示说明
1. 普通二叉树
(只有一个规则:最多两个孩子)
5 / \ 3 8 \ 4- 可以缺左、缺右
- 大小随便乱
- 没有任何顺序要求
2. 完全二叉树
(结构规则:除最后一层,前面都满;最后一层靠左排满)
1 / \ 2 3 / \ 4 5- 结构很整齐
- 不会中间空,不会右边空左边有
- 但大小还是可以乱
3. 大顶堆(最大堆)
必须同时满足:
- 是完全二叉树
- 父节点 ≥ 子节点
9 / \ 7 8 / \ 6 5- 堆顶(最上面)是最大值
- 任何父 ≥ 子
4. 小顶堆(最小堆)
必须同时满足:
- 是完全二叉树
- 父节点 ≤ 子节点
2 / \ 3 4 / \ 5 6- 堆顶(最上面)是最小值
- 任何父 ≤ 子
一句话总结(背这个就够)
- 二叉树:最多俩孩子,结构随便
- 完全二叉树:结构整齐、靠左排满
- 二叉堆= 完全二叉树 + 大小规则
- 大顶堆:爸爸 ≥ 儿子
- 小顶堆:爸爸 ≤ 儿子
