首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堆vs二叉搜索树(当它比另一个更好?)

堆vs二叉搜索树(当它比另一个更好?)
EN

Stack Overflow用户
提问于 2015-03-01 21:02:11
回答 1查看 1.4K关注 0票数 1

在什么情况下,使用最小堆比使用二叉树更有效?在二叉树中查找最小值的时间是否等于在min-heap - O(1)中查找最小值的时间?

EN

回答 1

Stack Overflow用户

发布于 2015-03-12 04:17:22

这几乎就像是比较咖啡杯和考拉熊。堆和二进制搜索树旨在执行截然不同的功能。堆是优先级队列抽象数据类型的实现。在基本级别上,优先级队列(因此是堆)只是一个放东西的袋子,当你伸手去取东西时,你总是得到袋子里最小(min-heap)或最大(max-heap)的东西。

您可以让堆具有删除任意项或更改堆中项的优先级的能力,但这些都是更高级的功能,不属于堆数据结构的传统定义的范围。

二叉搜索树是一种截然不同的东西。它是一个放东西的袋子,你可以快速伸手按键抓取任何物品,或者你可以按顺序(或相反顺序)列出所有物品。

您可以使用二进制搜索树来实现优先级队列,这意味着您原则上可以用二叉树替换堆。二叉树的性能不如堆,但它可以完成这项工作。

但事实并非如此。您不能使用堆来替换二进制搜索树。

因此,哪个更好的问题实际上是你想做什么的问题。

如果你想要一个有序的项目集,你可以从其中快速定位任何项目,或者你可以按顺序遍历,那么你就需要一个二叉搜索树。

如果您想要实现优先级队列抽象数据类型:当您请求最小(或最大,取决于您如何定义)项时,包将快速提供给您,那么您希望使用堆。

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

https://stackoverflow.com/questions/28793839

复制
相关文章

相似问题

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