【问题标题】:Implement a heap not using an array不使用数组实现堆
【发布时间】:2014-08-14 11:38:00
【问题描述】:

我正在为 Google 开发人员面试做准备,但遇到了一个关于堆的问题。我需要将堆实现为动态二叉树(不是数组),其中每个节点都有一个指向父节点和两个子节点的指针,并且有一个指向根节点的全局指针。这本书问“为什么这还不够?”

如何扩展标准树实现以支持堆操作add()deleteMin()?在这个数据结构中如何实现这些操作?

【问题讨论】:

标签: heap binary-tree


【解决方案1】:

你能保持总节点的大小吗?如果是这样,很容易知道应该在哪里添加新元素,因为那几乎是一棵完整的树。

关于deleteMin,我认为它会不太有效,因为你不能直接访问所有叶子,如数组(N / 2)。 你应该遍历所有路径直到你得到叶子然后比较它们,可能会花费 O(n)

【讨论】:

    猜你喜欢
    • 2015-08-17
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2020-10-24
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多