【发布时间】:2012-07-15 23:06:21
【问题描述】:
查找堆的父子节点的算法是:
父级:i / 2
左孩子:2i
右孩子:2i + 1
我尝试在纸上画出数组表示,但我不确定我是否完全直观地理解它。
【问题讨论】:
标签: algorithm
查找堆的父子节点的算法是:
父级:i / 2
左孩子:2i
右孩子:2i + 1
我尝试在纸上画出数组表示,但我不确定我是否完全直观地理解它。
【问题讨论】:
标签: algorithm
关键是元素以广度优先的方式枚举,并且索引是从 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 的工作原理相同(它“丢弃”余数。)
【讨论】: