找到堆的父级和子级的方程式背后的直觉是啥?

Posted

技术标签:

【中文标题】找到堆的父级和子级的方程式背后的直觉是啥?【英文标题】:What's the intuition behind the equations for finding the parent and children of heaps?找到堆的父级和子级的方程式背后的直觉是什么? 【发布时间】:2012-07-15 23:06:21 【问题描述】:

查找堆的父子节点的算法是:

父级:i / 2

左孩子:2i

右孩子:2i + 1

我尝试在纸上画出数组表示,但我不确定我是否完全直观地理解它。

【问题讨论】:

【参考方案1】:

关键是元素以广度优先的方式枚举,并且索引是从 1 开始的(它们从 1 开始,而不是 0)。

    1
   / \
  2   3
 / \ / \
4  5 6  7

以3为例

2*3   = 6   left child
2*3+1 = 7  right child

将 6 和 7 除以 2 得到 3,至少在进行整数除法的语言中是这样。

以这种方式继续编号,您的直觉应该会起作用。通常,乘以 2 将始终给出左孩子的索引。右孩子是左孩子的继任者(+1)。整数除以 2 的工作原理相同(它“丢弃”余数。)

【讨论】:

以上是关于找到堆的父级和子级的方程式背后的直觉是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中为父级和子级创建活动类

使用 MVC 5 向 Kendo UI 控制器添加父级和子级

nHibernate 保存一对多

第十五周总结

完整的二叉树交换子级和父级错误

Firebase:在不知道父级的情况下查询内部子级