文章目录
一、二叉树的顺序存储
使用数组保存二叉树结构,方式,即将二叉树用层序遍历的方式放入数组中。一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费。这种方式的主要用法就是堆的表示。
堆主要用到已知父节点,判断子节点位置,父节点和子节点下标关系:
已知父节点下标i,左孩子下标2i+1;右孩子下标2i+2;
已知孩子(不区分左右)下标j,父节点下标(j-1)/2;
二、堆的概念和创建
1、什么是堆?
堆逻辑上是一棵完全二叉树,物理上是保存在数组中,满足任意节点的值都大于其子树中节点的值,叫做大堆,或者大根堆,或者最大堆,反之,则是最小堆或者小根堆,或者最小堆。堆的基本作用是快速找集合中的最值
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
2、向下调整和创建堆
前提:左右子树必须已经是一个堆,才能调整
//向上调整
public void adjustDown(int parent,int len){
int child = 2*parent+1;
while(child < len){
if(child+1 < len&&this.elem[child] < this.elem[child+1]){
//有右节点
child++;//用child 表示左右子节点中较大的数的下标
}
if(this.elem[parent] < this.elem[child]){
int tmp = this.elem[parent];
this.elem[parent] = this.elem[child];
this