开发者社区> 问答> 正文

如何在基于数组的BST中找到第k个最小的元素?(Java)

我被认为是一项任务,但这对我来说似乎非常困难。

public class BinarySearchTree<A extends Comparable<? super A>> {

public int[] size
public Object[] list

public A get(int x) {
}

}

7
   / \
  5   10
 / \  / \
3   6 9 11

The above tree would be stored as [7, 5, 10, 3, 6, 9, 11] in the list array.

所以我有这个结构。我必须通过使用子树的大小来找到第x个最小的元素。我不知道如何首先找到子树的大小,然后使用该信息来找到第x个值。

有人有办法吗?我已经尝试了好几天,但即使是网络也没有给我太多信息。

任何帮助表示赞赏,谢谢。

展开
收起
垚tutu 2019-12-04 16:57:01 984 0
1 条回答
写回答
取消 提交回答
  • #include

    请记住,BST已排序。底层数组不是,但是如果您以某种方式遍历树(留给您查找),您将按升序获得每个元素。如果您确实设法做到这一点,则只需要查看直到到达第n个元素即可。

    我想您可以使用子树的大小来弄清楚,但这听起来不必要地复杂(也就是说,代码的可读性较差,数学不太难)并且在现实生活中不切实际。毕竟,BST存在是有原因的。

    可以处理尺寸。想象一下,您从根本开始。令L为左侧子树的大小,R为右侧子树的大小。您的总节点数将为L + R +1。您的根节点的索引为L,如果x大于L,您会知道您会在右侧子树中找到元素,如果较小,则向左看。(假设x为空索引)。这是一般模式,您可能可以自己解决其余的问题。

    2019-12-04 16:57:08
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载