【发布时间】:2016-09-04 23:19:34
【问题描述】:
在我昨天的采访中,我被问到从给定的中序和前序/后序构造二叉树的时间复杂度。
我提出了倾斜树,它需要 O(N^2),如果我们能保证平衡的二叉树,那么我们可以在 O(N log N) 中完成。
但是,为了回复独特,我想出了一个可以在 O(N) 时间内完成的想法。我给出的原因是
将中序遍历的所有节点一一放入哈希表中O(N)。
在哈希表中搜索特定节点可以在摊销 O(1) 中完成。
理论上,总时间复杂度可以降低到 O(N)。 (其实我还没实现)
那么,我的回复是否正确,结果尚未公布。
【问题讨论】:
-
假设你只是简单地将节点指针链接在一起,那么,肯定是O(N),否则,如果总是遍历根添加一个新节点,那么O(N log N)
-
你能说的更具体点吗,抱歉我没听懂
-
假设您将所有节点存储在哈希表中,您如何存储给定节点的父节点等层次结构信息?以及如何在 O(1) 中搜索哈希表中的特定节点?这将需要 O(N) 时间
-
对于摊销哈希表中的每个元素查找时间都是O(1)
-
二叉树中的所有元素都是不同的吗?否则会有多种可能。