1.二叉树的的存储结构:
(1)顺序结构————顺序存储——堆——数组
(2)链式结构————链式存储——链表
2.二叉树可以用数组存储?
可以,按照层序的方式把值平铺在数组上(完全二叉树)
非完全二叉树平铺到数组中时,会有很多空调,所以往往不用这种方式
3.关注下表的变化
(1)已知parent的下标:left=2*parent +1
right = 2*parent+2
(2)已知child的下标(不分左右)
parent = (child -1)/2
4.堆 二叉堆
(1)逻辑上是一棵完全二叉树
(2)物理上是一个数组
(3)满足 任意位置的值 >= 他的左右孩子的值 ——>大堆
满足 任意位置的值 <= 他的左右孩子的值 ——>小堆
(4)堆的基本功能:找最值
5.堆的重要操作
5.1向下调整(堆化)
void adjustDown(int[] array, int index);
前提:在整个堆中,除了要调整的位置之外,其余位置都已经满足堆的性质
0.如果要调整的位置是叶子结点就不需要调整了
1.找到两个孩子中的最大的一个孩子
2.比较最大孩子的值和要调整位置的值
1.如果满足堆的性质&#