堆的右和左子的方程是否准确?

时间:2016-12-30 21:52:33

标签: data-structures heap

在堆数据结构中,执行两个等式

public function __construct()
{
    $this->posts = new ArrayCollection();
}



/**
 * @return ArrayCollection|GenusNote[]
 */
public function getPosts()
{
    return $this->notes;
}

适用于任何给定的堆?如果没有,在什么条件下它们应该有效?

2 个答案:

答案 0 :(得分:0)

根据DS Malik“堆是一个列表,其中每个元素都包含一个键,这样列表中位置k的元素中的键至少与位置2k + 1中元素中的键一样大。 (如果存在)和2k + 2(如果存在)。“

您还应该注意元素在列表中的位置:“通常,对于节点k,它是列表的第k个元素,其左子节点是列表的第2k(如果存在)元素,在列表中位于2k-1的位置,右边的孩子是列表中的2k + 1st(如果存在)元素,位于列表中的位置2k。“

学习时我发现实际输入一些索引很有帮助,并确保你得到你希望的元素。祝你好运。

答案 1 :(得分:0)

取决于root的位置。如果根位于数组中的索引0处,那么您的方程式是正确的。左侧节点位于索引2i + 1,右侧节点位于索引2i + 2

许多示例在数组中的索引为1的根。在这种情况下,左子节点位于索引2i,右侧节点位于索引2i + 1