2
查找第n个最小元素如何从二叉搜索树找到第n个最小元素从二叉搜索树
约束是:
- 时间复杂度必须
O(1)
- 没有多余的空间,应使用
我已经尝试了2种方法。
- 做序遍历和寻找第n个元素 - 时间复杂度
O(n)
- 维护没有。小元素比当前节点,并找到有m个元素小的元素 - 时间复杂度
O(log n)
查找第n个最小元素如何从二叉搜索树找到第n个最小元素从二叉搜索树
约束是:
O(1)
我已经尝试了2种方法。
O(n)
O(log n)
我能想到的唯一的办法是改变保存在内存中的BST的数据结构。如果实际上将每个节点视为结构本身(value,left_child和right_child)而不是将它们存储在无序数组中,那么应该很简单,可以将它们存储在有序数组中。因此第n个最小的元素将是你数组中的第n个元素。额外的计算将在插入和删除。但是,如果您使用例如C++集(用于插入和删除的log(n)),它仍然会更有效。
它主要取决于你的用例。
如果你不使用数据结构来处理树(基于数组的位置),我认为你不能用比log(n)更好的东西来完成它。
我不能跨越第二个约束--->'不应该使用额外的空间!你确定吗? –
是的......我也无法得到这个约束的答案...因此想到把这个在stackoverflow得到一些提示.. 采访者是专门寻找这个约束.. – Kailas
你是什么意思的“不”额外空间'?另外,据我所知,你永远不会从二叉树中得到'O(1)'。 –