Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data structures 从二叉搜索树中查找第n个最小元素_Data Structures - Fatal编程技术网

Data structures 从二叉搜索树中查找第n个最小元素

Data structures 从二叉搜索树中查找第n个最小元素,data-structures,Data Structures,如何从二叉搜索树中找到第n个最小元素 制约因素包括: 时间复杂度必须是O(1) 不应使用额外的空间 我已经尝试了两种方法 按顺序遍历并查找第n个元素-时间复杂度O(n) 维护比当前节点小的元素数量,并查找具有m个小元素的元素-时间复杂度O(log n) 我所能想到的唯一方法是更改将BST保存在内存中的数据结构。如果您将每个节点视为结构本身(value、LeftTyStand和RealSt娃),而不是将它们存储在无序数组中,则可以将它们存储在有序数组中。因此,第n个最小元素将是数组中的第n个元素。

如何从二叉搜索树中找到第n个最小元素

制约因素包括:

  • 时间复杂度必须是
    O(1)
  • 不应使用额外的空间
  • 我已经尝试了两种方法

  • 按顺序遍历并查找第n个元素-时间复杂度
    O(n)
  • 维护比当前节点小的元素数量,并查找具有m个小元素的元素-时间复杂度
    O(log n)

  • 我所能想到的唯一方法是更改将BST保存在内存中的数据结构。如果您将每个节点视为结构本身(value、LeftTyStand和RealSt娃),而不是将它们存储在无序数组中,则可以将它们存储在有序数组中。因此,第n个最小元素将是数组中的第n个元素。额外的计算将在插入和删除时进行。但如果使用C++集(log(n)既用于插入又删除),则它将更有效。 这主要取决于您的用例


    如果您不使用数据结构来处理树(基于数组位置),我不认为您不能用比log(n)更好的方法来处理它。

    我无法跨越第二个约束-->
    不应使用额外的空间。
    !你确定吗?是的。。。我也无法得到这个约束的答案。。。因此,考虑将此应用于stackoverflow以获得一些提示。。面试官特别注意这个限制。你说的没有额外空间是什么意思?另外,据我所知,你永远不会从二叉树中得到
    O(1)
    。在我看来,第二个约束条件只意味着你应该以迭代的方式而不是递归的方式来做。至于第一个限制,我不知道如何以及是否可以满足。这个问题缺乏具体性。您想支持诸如“给我第五个最小的元素”和稍后的“给我第八个最小的元素”之类的查询吗?或者你想建立一棵树,它总是给你第四个最小的元素,例如?如果是后者,则可以维护对第四个最小元素的引用,并在添加或删除较小元素时在O(logn)中更新它(可能更快)。但是,这需要树中的O(1)空间来维护引用。如果树是静态的,那么还有其他可能性。我需要更多的信息。