如何找到O(h)时间的中位数?

时间:2019-04-25 15:07:50

标签: java recursion binary-search-tree

这是一个家庭作业问题-

我需要找到O(h)时间中的二叉搜索树的中位数-意思是,我无法遍历整个树来找到它。我需要通过递归解决方案遍历树的左侧或右侧来找到中位数。

我已使用顺序遍历在BST的每个节点中放置了一个索引。 因此,如果BST有99个节点,则最小的节点的索引为1,下一个最小的节点的索引为2等等,而最大的节点的索引为99。这也是该分配的索引。

因此,较重的一方具有中位数。

这就是我的想法:

如果左侧有更多节点,则中位数在左侧。如果右侧有更多节点,则中位数在右侧。如果左侧和右侧的节点数相等,则中位数是整棵树的主根。

但是我无法想到节点的索引将如何在其中的任何方面发挥作用。我当时在考虑使用2个节点的索引之差来查看1侧是否较重,但这需要我遍历我认为的整个树,所以这将是O(n)。

请为我设置更清晰的路径或提示或2。

0 个答案:

没有答案