目录
2.1 树的第四层子节点,和父节点,第三层层进行大项堆比较,【红色的是比较交换后的数字】编辑
2.2 树的第三层子节点,和父节点,第二层进行大项堆比较,【绿色的是比较交换后的数字】
2.3 树的第二层子节点,和父节点,第一层进行大项堆比较,【换色色的是比较交换后的数字】 编辑
3.1 最后的节点和根节点做交换【5,50做交换】,砍掉最后的节点
3.3 、在对节点做heapify,之后,根节点在和最后的最后的节点,做交换【48,5】,砍掉最后的节点
3.3 、以此类推,根节点在和最后的最后的节点,做交换【47,5】,砍掉最后的节点,其他的节点也是这样实现,就不一一列举了
一、基本概念
首要需要理解的堆是由树组成,一种叫做完全二叉树的数据结构。
二、大小堆
大顶堆:每个节点的值都大于或者等于它的左右子节点的值。
小顶堆:每个节点的值都小于或者等于它的左右子节点的值。可以得到的排序排序的列表
对于大顶堆:arr[i] >= arr[2i + 1] && arr[i] >= arr[2i + 2]
对于小顶堆:arr[i] <= arr[2i + 1] && arr[i] <= arr[2i + 2]
三、堆实现heapify
1、把列表转化为堆 【大项堆】
listF = [4, 48, 3, 50, 4, 47, 5, 38, 15, 46, 19, 44, 27, 26, 36]
parent_node = (i -1) /2 # i 代表再树中索引的位置
lef_node = 2 * i +1
ritht_node = 2 * 1 +2