找到堆的父母和孩子的等式背后的直觉是什么?

时间:2012-07-15 23:06:21

标签: algorithm

查找堆的父级和子级的算法是:

家长:i / 2

左子:2i

正确的孩子:2i + 1

我已经尝试在纸上绘制数组表示法,但我不确定我是否完全直观地得到它。

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的工作原因相同(它“抛弃”其余部分。)