查找堆的父级和子级的算法是:
母公司:i/2
留守儿童:2岁
右孩子:2i+1
我试过在纸上画出数组的表示,但我不确定我是否完全凭直觉得到它。
最佳答案
关键是元素是以广度优先的方式枚举的,并且索引是基于1的(它们从1开始,而不是0)。
1
/ \
2 3
/ \ / \
4 5 6 7
以3为例
2*3 = 6 left child
2*3+1 = 7 right child
6和7除以2等于3,至少在做整数除法的语言中是这样。
继续以这种方式编号,你的插管就应该开始了一般来说,乘以2总是得到左孩子的索引。右子项是左子项的后续项(+1)整数除以2的工作原理是相同的(它“丢弃”了余数)