首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不带数组的MinMax堆实现

不带数组的MinMax堆实现
EN

Stack Overflow用户
提问于 2011-01-15 14:36:46
回答 5查看 5.8K关注 0票数 3

我发现了许多在数组中存储数据的MinMax堆实现。它真的很容易实现,这就是我寻找不同东西的方式。我想创建一个MinMax堆,只使用堆的元素,指针指向左子和右子(当然还有一个要比较的键)。因此,堆只有指向根对象(最低级别)的指针,而根对象有指向其子对象(最高级别)的指针,依此类推。我知道如何插入一个新对象(根据堆大小,使用int的二进制表示来找到合适的路径),但我不知道如何实现其余的(向上(向下)元素,查找父级或祖级)。

Thx请求帮助

EN

回答 5

Stack Overflow用户

发布于 2012-10-13 12:40:28

使用堆排序二叉树的优先级队列可以使用三重链表结构而不是数组来实现。每个节点需要三个链接:两个向下遍历,一个向上遍历。

票数 2
EN

Stack Overflow用户

发布于 2011-10-30 04:30:35

heapq module source code显示了实现向上和向下推送的步骤。要从数组实现切换到指针实现,请将arr[2*n+1]计算替换为node.left,将arr[2*n+2]替换为node.right。对于父引用,如arr[(n-1)>>1],每个节点都需要一个指向其父节点node.parent的指针。

或者,您也可以采用函数式风格,这使得这一切都非常容易实现。我发现treaps implemented in Lisp的代码启发了我如何做到这一点。

票数 1
EN

Stack Overflow用户

发布于 2019-03-09 20:38:52

作为很久以前的一个任务的一部分,我已经解决了这个问题。你可以在here上找到它

我有多个用Java和C++实现的实现MinHeap的方法,其中有数组也有数组。有关解决方案,请参阅我的Java实现。是的,在没有数组的情况下实现堆是非常有可能的。您只需记住在何处插入下一个节点,以及如何堆和反堆即可。

Edit1:我还试图查找没有数组的min heap的任何现有解决方案,但没有找到任何解决方案。所以,我把它贴在这里,这样对任何想知道方法的人都会有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4698338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档