【发布时间】:2015-05-11 20:34:02
【问题描述】:
有一次我被“一家知名公司”面试,面试官让我求 BST 的中位数。
int median(treeNode* root)
{
}
我开始实施我想出的第一个蛮力解决方案。我使用中序遍历将所有数据填充到std::vector<int> 中(以使所有内容都在向量中排序)并获得中间元素。
所以我的算法是 O(N) 用于插入向量中的每个元素并使用 O(1)、+ O(N) 的内存查询中间元素。
那么有没有更有效的方法(就内存或复杂性而言)来做同样的事情。
提前致谢。
【问题讨论】:
-
如果您可以将树修改为等级树(每个节点还保存其作为根的子树中的节点数),则可以在 O(logn) 时间和空间内完成,不改变树的插入/删除/搜索。
标签: c++ algorithm vector time-complexity binary-search-tree