Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
查找堆的父子节点的算法是:
家长:i / 2
左孩子:2i
右孩子: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 的工作原理相同(它“丢弃”余数。)