本章我可能会犯错、要注意的点:
- 满二叉树、完全二叉树、树的度、树的高度的概念
- 二叉树父亲节点与孩子节点关系计算
- 二叉树不存在 度 大于2的节点 ( 度最大为2 )
- 二叉树是有序树,有左右之分,次序不能颠倒
- 完全二叉树中,度为1的最多只有1个
- 注意:堆是一个完全二叉树
- 因为堆是完全二叉树,所以是数组形式,而其他二叉树都是链式形式
- 堆,要么是大堆,要么是小堆; 大小堆是让“ 堆 ”成为“ 堆 ” 的条件
- 大小堆的概念
- 大小堆的应用:(1)堆排序 (2)topK问题
- 堆的代码结构定义和顺序表类似
- 向上向下调整都需要调整树的高度h次,即:时间复杂度为:O(log2_N)
- 建堆时间复杂度是 O(N)【公式推导过程复杂】
- 想想为什么要用堆实现Topk问题?在N非常大的时候,其他算法为什么不行?
- *选最大的K个数,是建立小堆。(注意:是反过来的,选大建小;选小建大)(体会原因)
- 优化建堆操作,使空间复杂度为O(1),即直接对数组a进行操作,有两种方式: (1)向上调整 (依次加入,然后调整) (2)向下调整 (倒着走,然后调整)
- *堆排序 - 升序 - 用大堆!!
- 二叉树的层序遍历不需要用到递归,而是队列。
目录
(11)✳删除堆顶数据(拿最大堆举例,即:删除后仍保持是大堆)
(2)最优化的二叉树节点计数算法(通过返回值,“校长摇人”)
4.5二叉树第K层节点个数(难理解!)