堆:用C ++确定一个叶子

时间:2017-04-25 23:01:16

标签: c++ heap

这个解释让我对堆中叶子的确定有点迷惑

"请注意我们如何检测堆中的节点是否为叶子。如果堆中的项目数至少为n但小于2 * n + 1,则带有下标n的节点是此二叉树上的叶子。"

例如:

val | 5 | 3 | 4 | 2 |

ind | 0 | 1 | 2 | 3 |

所以数组中有4个元素,当我向下到元素2时,我应该停在右边?

因为从等式2 * n + 1,意味着根是2 * root + 1并且必须小于总节点,对吗?

谢谢你!

1 个答案:

答案 0 :(得分:0)

n = 0  Is the heap at least n?      Yes
       Is the heap less than 2*n+1? No
n = 1  Is the heap at least n?      Yes
       Is the heap less than 2*n+1? No
n = 2  Is the heap at least n?      Yes
       Is the heap less than 2*n+1? Yes

通过归纳,您可以告诉n=2之后的所有内容也是叶节点。反过来考虑这一点,如果找到最后一个节点的父节点,您将知道后面的每个元素都是叶节点。因此,最后一个非叶节点是索引(3-1)/2 = 1