二叉堆的构建
对于二叉堆,有三种操作
插入节点,插入是节点上升,数组的最后一个叶子节点
删除节点,删除是节点下沉
意思是删除的是栈顶的节点,从头开始下沉。为了维持完全二叉树结构,会把堆的最后一个节点临时补到原来栈顶的位置
构建二叉堆
本职是所有非叶子节点依次下沉
第一个非叶子节点 下标计算:(len(array) - 2 ) // 2
关于代码优化部分,# 无需真正交换,单向赋值即可
是指的对于插入,上浮,循环每次只更新孩子节点,最终确定的父节点最后循环后赋值,这个赋值是在循环开始之前:用一个temp 保存插入的叶子节点值,用于最后的赋值。 上到最上面,把temp赋值最上面的孩子节点
对于删除,下沉,循环每次只更新父节点,循环之前的temp 保存父节点的值,用于最后的赋值。下到最下面,把temp赋值给最下面的父亲节点
文字解释
代码
def up_adjust(array=[]):
"""
二叉堆的尾节点上浮操作 小根堆,小的值上浮,相当于插入操作
:param array:原数组
"""
child_index = len(array) - 1
parant_index = (child_index - 1) // 2
# temp 保存插入的叶子节点值,用于最后的赋值
temp = array[child_index]
# 循环的条件是 孩子下标大于0并且孩子节点值小于父亲节点值(小的上浮)
while child_index