1.Heap
表示方法
满足以下性质的二叉树Binary Tree
可以成为Binary Heap
:
Complete Tree
:所有的层都是完全的,除了最后一层,且最后一层的叶子靠左。Min Heap or Max Heap
:根节点是最大值或者最小值,而且这个性质对于任何递归得到的子树都成立。
Binary Heap
通常使用array
表示:
- 根节点在
array[0]
; array[(i-1)//2]
返回父节点,array[2*i+1]
返回左孩子树,array[2*i+2]
返回右孩子树。
Binary Heap
通常使用array
表示,对于任意索引i
:
def parent(i):
return (i-1)//2
def left(i):
return 2*i+1
def right(i):
return 2*i+2
2.Max-Heapify
max heapify
是保持max-heap
性质的操作,输入为array A and index i
,假设输入时,以left(i) and right(i)
为根节点的子数都满足最大堆性质,但是以i
为根节点的子数不满足最大堆性质。max heapify
函数让A[i]
向下层转移,进行调整。
def MaxHeapify(array,i):
l = left