问题1:看老师的文档,堆是一个二叉树,但是在push函数里,老师计算父节点时,直接用数组的索引来获取,heap[parentIndex], 这样能获取到吗?参数中传过来的数组数据,不需要先转化为树结构吗?
问题2: const parentIndex = (index - 1) >>> 1; 这个位运算不太理解,能再详细说一下吗?
问题3:heap这个数组,是已经转为最小堆的一维数组吗?
function siftUp<T extends Node>(heap: Heap<T>, node: T, i: number): void {
let index = i;
while (index > 0) {
const parentIndex = (index - 1) >>> 1;
const parent = heap[parentIndex];
if (compare(parent, node) > 0) {
// node子节点更小,和根节点交换
heap[parentIndex] = node;
heap[index] = parent;
index = parentIndex;
} else {
return;
}
}
}