Data structures heap的左、右子代的方程精确吗?

Data structures heap的左、右子代的方程精确吗?,data-structures,heap,Data Structures,Heap,在堆数据结构中,执行以下两个等式 left = 2i+1 right = 2i+2 在任何给定堆上应用?如果不是,在什么情况下它们是有效的?根据D.S.Malik的说法,“堆是一个列表,其中每个元素都包含一个键,因此列表中位置k处元素中的键至少与位置2k+1(如果存在)和2k+2(如果存在)处元素中的键一样大。” 您还应该注意元素在列表中的位置:“通常,对于节点k,它是列表中的第k-1个元素,它的左子元素是列表中的第2k个(如果存在)元素,它在列表中的位置为2k-1,右子元素是列表中的第2k+

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

left = 2i+1
right = 2i+2
在任何给定堆上应用?如果不是,在什么情况下它们是有效的?

根据D.S.Malik的说法,“堆是一个列表,其中每个元素都包含一个键,因此列表中位置k处元素中的键至少与位置2k+1(如果存在)和2k+2(如果存在)处元素中的键一样大。”

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


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

这取决于根在哪里。如果根在数组中的索引0处,则您的方程式是正确的。左侧节点位于索引
2i+1
,右侧节点位于索引
2i+2

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