查找堆的父级和子级的算法是:
家长:i / 2
左子:2i
正确的孩子:2i + 1
我已经尝试在纸上绘制数组表示法,但我不确定我是否完全直观地得到它。
答案 0 :(得分:4)
关键是元素以广度优先的方式枚举,索引是从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的工作原因相同(它“抛弃”其余部分。)