我正准备接受谷歌开发人员的采访,并且已经陷入了关于堆积的问题。我需要将堆实现为动态二叉树(而不是数组),其中每个节点都有一个指向父节点和两个子节点的指针,并且有一个指向根节点的全局指针。这本书问“为什么这不够?”
如何扩展标准树实现以支持堆操作 add()和 deleteMin()?如何在这个数据结构中实现这些操作?
答案 0 :(得分:0)
你能保持总节点的大小吗?如果是这样,很容易知道你应该在哪里添加新元素,因为那是一棵几乎完整的树。
关于deleteMin,我认为它不太有效,因为你无法直接访问所有叶子,就像在数组(N / 2)中一样。 你应该穿过所有的路径,直到你得到叶子,然后比较它们,可能会花费O(n)