Java 递归建立二叉搜索树

Java 递归建立二叉搜索树,java,arrays,algorithm,recursion,binary-search-tree,Java,Arrays,Algorithm,Recursion,Binary Search Tree,我很难理解从哪里开始写这个方法。该方法使用从数组(全局变量)获取的数据构建树。该方法采用两个参数,即int、size和start 我已经递归地编写了insert和delete方法,但我不知道如何开始考虑构建它。不确定应该使用什么大小和起始值,并且在添加节点时,如何移动到数组中的下一个索引而不将其作为参数 算法或任何帮助将不胜感激。谢谢 编辑:我无法在构建树时使用插入和删除方法。构建必须是自己的。数组只存储要放入树中的预排序值我猜大小和开始是允许调用代码从全局数据数组的子数组构建二叉搜索树的参数。

我很难理解从哪里开始写这个方法。该方法使用从数组(全局变量)获取的数据构建树。该方法采用两个参数,即int、size和start

我已经递归地编写了insert和delete方法,但我不知道如何开始考虑构建它。不确定应该使用什么大小和起始值,并且在添加节点时,如何移动到数组中的下一个索引而不将其作为参数

算法或任何帮助将不胜感激。谢谢


编辑:我无法在构建树时使用插入和删除方法。构建必须是自己的。数组只存储要放入树中的预排序值

我猜
大小
开始
是允许调用代码从全局数据数组的子数组构建二叉搜索树的参数。如果这是课堂作业,你应该和你的老师确认

如果我的猜测是正确的,那么在已经完成的工作的基础上编写方法就相当简单了。创建一个空的二叉树,然后从全局数据数组中的偏移量
start
开始,插入连续的元素,直到插入了其中的
size

您不需要将数组作为参数,因为它是一个全局变量

编辑(基于对问题的编辑):

如果全局数组已经在预排序中,那么它的结构将是:

index:
 start          start+1                    end (see below)           start+size
+--------------+--------------------------+-------------------------+
| array[start] | ... smaller elements ... | ... larger elements ... |
+--------------+--------------------------+-------------------------+
array[start]
之后的每个部分也将具有相同的结构

要从中构建BST,第一个元素进入搜索树的根。然后,以下所有小于第一个元素的元素进入左子树,而从数组末尾开始的第一个较大元素进入右子树。因此,算法是:

  • 如果
    size
    为0,则返回
    null
  • 在根目录下创建一个包含
    数组[start]
    的BST
  • start+1
    扫描到数组末尾,查找大于
    start
    处元素的第一个元素的索引。调用此索引
    end
    。(如果所有剩余的元素都小于索引
    start
    处的元素,则
    end
    将是数组长度。)
  • 将在步骤2中创建的二叉搜索树的左子树设置为递归调用该方法的结果,对于新大小,使用参数
    end-start-1
    ,对于新开始,使用参数
    start+1
  • 将二叉搜索树的右子树设置为递归调用方法的结果,新大小的参数为
    start+size-end
    ,新开始的参数为
    end

  • 在的维基百科页面上有一个lool。他们为所有操作准备了一个伪代码。我应该帮你。我和我的老师谈过了,这很接近。他说开始和大小与阵列有关。我们应该把问题“分解”成更小的部分。例如,放置第一个节点后,查找将进入左子树和右子树的节点。@user2858976-好的。对你的问题的编辑澄清了很多事情。我已经更新了我的答案。