Algorithm 当我们对二叉堆树说抽象类型时,它是什么意思?

Algorithm 当我们对二叉堆树说抽象类型时,它是什么意思?,algorithm,data-structures,tree,Algorithm,Data Structures,Tree,我读过一个术语“抽象类型”,意思是你可以使用结构或骨架。我说的是二进制堆树。我读到它是一种抽象类型,但当问题出现时,合并两个最小堆来创建一个最大堆的时间复杂度是多少? 我得到了一些答案,说将树的元素复制到数组中,并使用buildheap方法n创建max heap in time!但是,当不能作为抽象类型遍历树时,如何在const time/或On time中复制min heap的元素呢。剩下的唯一一件事就是逐个删除所有元素,并将其保留在数组中,这只需要很长时间。 谁能花点时间让我理解这个疑问 谢

我读过一个术语“抽象类型”,意思是你可以使用结构或骨架。我说的是二进制堆树。我读到它是一种抽象类型,但当问题出现时,合并两个最小堆来创建一个最大堆的时间复杂度是多少? 我得到了一些答案,说将树的元素复制到数组中,并使用buildheap方法n创建max heap in time!但是,当不能作为抽象类型遍历树时,如何在const time/或On time中复制min heap的元素呢。剩下的唯一一件事就是逐个删除所有元素,并将其保留在数组中,这只需要很长时间。 谁能花点时间让我理解这个疑问


谢谢

我认为您混淆了抽象数据类型的实现及其接口

要实现堆或队列等,可以对其内部结构执行任何操作。 请注意,堆的内部结构可以是任何数组、列表。。。;事实上,堆的内部结构对用户来说是隐藏的,但对开发人员来说也是可见的

实现的堆将只提供定义其抽象类型的接口方法


当人们谈论合并两个堆时,他们谈论的是同时实现合并功能的堆。在堆实现内的merge函数中,您可以使用内部实现的所有函数。

ya…我知道它只提供其接口。但是通过这个接口你能遍历它吗?假设一种情况:从最小值堆中获得第二个最小值?我希望你会回答为删除根,heapify,获取根,这是你的第2分钟,对吗这将需要很长时间,如果我可以遍历树,为什么我要删除根,即第二分钟肯定会在根的下一级。这里我只需要2个比较,即根的左n右之间,小于Ologn时间同意吗??如果出现错误,请纠正我好吗?traverse不是可用的接口操作。