堆的概念:
堆是一种完全二叉树,就是除了最后一层之外的其他每一层都被完全填充,并且所有结点都保持向左对齐的树。就像码金字塔的砖块,必须从头到底,从左到右一个一个码,不能空缺。
堆有两种类型:大根堆,小根堆
大根堆:每个结点的值都大于或等于左右孩子结点
小根堆:每个结点的值都小于或等于左右孩子结点
大根堆:
小根堆
大根堆构建流程:
- 先依据构建一个完全二叉树
此处并没有构造实际的二叉树,而是逻辑上:
import math
def print_tree(array):
'''
前空格元素间
170
237
313
4 01
'''
index = 1
depth = math.ceil(math.log2(len(array))) # 因为补0了,不然应该是math.ceil(math.log2(len(array)+1))
sep = ' '
for i in range(depth):
offset = 2 ** i
print(sep * (2 ** (depth - i - 1) - 1), end='')