【发布时间】:2014-08-14 11:38:00
【问题描述】:
我正在为 Google 开发人员面试做准备,但遇到了一个关于堆的问题。我需要将堆实现为动态二叉树(不是数组),其中每个节点都有一个指向父节点和两个子节点的指针,并且有一个指向根节点的全局指针。这本书问“为什么这还不够?”
如何扩展标准树实现以支持堆操作add() 和deleteMin()?在这个数据结构中如何实现这些操作?
【问题讨论】:
标签: heap binary-tree
我正在为 Google 开发人员面试做准备,但遇到了一个关于堆的问题。我需要将堆实现为动态二叉树(不是数组),其中每个节点都有一个指向父节点和两个子节点的指针,并且有一个指向根节点的全局指针。这本书问“为什么这还不够?”
如何扩展标准树实现以支持堆操作add() 和deleteMin()?在这个数据结构中如何实现这些操作?
【问题讨论】:
标签: heap binary-tree
你能保持总节点的大小吗?如果是这样,很容易知道应该在哪里添加新元素,因为那几乎是一棵完整的树。
关于deleteMin,我认为它会不太有效,因为你不能直接访问所有叶子,如数组(N / 2)。 你应该遍历所有路径直到你得到叶子然后比较它们,可能会花费 O(n)
【讨论】: