递归地构建二进制搜索树

时间:2013-10-16 17:10:47

标签: java arrays algorithm recursion binary-search-tree

我在理解从哪里开始编写此方法时遇到问题。该方法使用从数组中获取的数据(这是一个全局变量)构建树。该方法采用两个参数,即整数,大小和开始。

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

非常感谢算法或任何帮助。谢谢!

编辑:构建树时,我无法使用插入和删除方法。构建必须是它自己的。并且该数组仅存储要放入树中的预订值

1 个答案:

答案 0 :(得分:0)

我的猜测是sizestart是允许调用代码从全局数据数组的子数组构建二进制搜索树的参数。如果这是课堂作业,您应该与老师确认。

如果我的猜测是正确的,那么通过建立你已经完成的工作来编写方法是相当简单的。创建一个空的二叉树,然后从全局数据数组中的偏移start开始,插入连续的元素,直到你插入size为止。

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

编辑(基于编辑问题):

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

index:
 start          start+1                    end (see below)           start+size
+--------------+--------------------------+-------------------------+
| array[start] | ... smaller elements ... | ... larger elements ... |
+--------------+--------------------------+-------------------------+

array[start]之后的每个部分也将具有相同的结构。

要从中构建BST,第一个元素将进入搜索树的根目录。然后,小于第一个元素的所有后续元素进入左子树,第一个较大元素直到数组末尾进入右子树。所以算法将是:

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