【问题标题】:Bulding a Binary Search Tree recursively递归构建二叉搜索树
【发布时间】:2013-10-24 22:18:48
【问题描述】:

我无法理解从哪里开始编写此方法。该方法使用从数组(这是一个全局变量)获取的数据构建一棵树。该方法接受两个参数,即 ints、size 和 start。

我已经递归地编写了插入和删除方法,但我什至不知道如何开始考虑构建它。不确定应该做什么大小和开始,以及添加节点时,我将如何移动到数组中的下一个索引而不将其作为参数包含在内。

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

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

【问题讨论】:

  • BinarySearchTree 的维基百科页面上试一试。他们对所有操作都有一个伪代码。应该能帮到你。

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


【解决方案1】:

我的猜测是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 表示新开始。

【讨论】:

  • 我和我的老师谈过了,这很接近。他说起始和大小与数组有关。我们应该将问题“拆分”成更小的部分。比如放置第一个节点后,找到要进入左子树和右子树的节点。
  • @user2858976 - 好的。对您的问题的编辑澄清了很多事情。我已经更新了我的答案。
猜你喜欢
  • 2014-01-02
  • 1970-01-01
  • 2021-07-03
  • 2019-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
相关资源
最近更新 更多