这个解释让我对堆中叶子的确定有点迷惑
"请注意我们如何检测堆中的节点是否为叶子。如果堆中的项目数至少为n但小于2 * n + 1,则带有下标n的节点是此二叉树上的叶子。"
例如:
val | 5 | 3 | 4 | 2 |
ind | 0 | 1 | 2 | 3 |
所以数组中有4个元素,当我向下到元素2时,我应该停在右边?
因为从等式2 * n + 1,意味着根是2 * root + 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
。