在堆数据结构中,执行两个等式
public function __construct()
{
$this->posts = new ArrayCollection();
}
/**
* @return ArrayCollection|GenusNote[]
*/
public function getPosts()
{
return $this->notes;
}
适用于任何给定的堆?如果没有,在什么条件下它们应该有效?
答案 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
。