我们如何使用递归将整数序列插入二叉搜索树?

问题描述

我正在尝试编写一个实现 BST 的递归函数。但是,我面临着许多无法解决的问题。

首先,我希望我的函数在每次递归时将位于数组“arr[]”中间索引的项目插入到 BST“t”中。但是,我不知道一般情况应该是什么。我试图实现这个逻辑,但我得到了所有错误输出

所以我的问题是,我哪里错了,我应该怎么做才能为这个递归函数创建一个合适的一般情况?

我的代码
enter image description here

解决方法

听起来您正在尝试构建一个包含排序列表元素的 BST。将来最好更仔细地指定您要解决的问题。

如果我猜对了,算法需要返回新 BST 的根。

你想要的直觉来自 BST 的结构:任何节点的子树本身就是 BST。

所以假设我们让 BST 创建者成为一个函数,可以对已排序的输入列表的任何块进行操作并将其转换为 BST。

像这样:

def build_bst(elements: List[int],first_index: int,last_index: int) -> Node:

现在我们可以使用对 BST 结构的直觉。

该算法在一些简单的算术中使用 first_indexlast_index 来获取块中间附近元素的索引 melements[m] 成为新创建节点中的数据。这将是 BST 的根。然后注意元素 first_indexm - 1 必须在新节点的左子树中。 m + 1last_index 必须在右子树中。使用递归调用来构建这些子树,将返回值分配为新节点的左右子节点。然后返回节点。

通用递归就是这样。我会让你计算出基本情况以及如何启动递归。

nb:如果您愿意将块实际计算为独立列表,则可以去掉索引参数。这看起来很优雅,但真正的实现可能需要额外的复制,这取决于语言和编程技术。我在这里展示的方式更普遍有用。