用另一个bst

时间:2019-04-14 22:52:55

标签: algorithm recursion binary-search-tree

我正试图提出一种算法,以使用另一个二进制搜索树中的元素来构建二进制搜索树,但是由于这些元素必须大于或等于某个给定整数的限制,我们将其称为{ {1}}。

我想到了一种递归方法(使用顺序遍历):

x

我不知道最后一个递归调用将是什么,我显然不能写出两个这样的返回值:

binary_tree (bst tree, int x) {
  if (tree is empty)
    return empty;
  if (tree->element>=x)
    insert tree->element in a new BST;
  else ????
}

我想不出什么了,如果这是一个愚蠢的问题,对不起!我只是从递归开始,这确实令人困惑。

2 个答案:

答案 0 :(得分:1)

让我们考虑一下我们在这里做什么。我们想从现有的二进制搜索树中构造一棵树。由于现有树是BST,因此我们可以获得一些有用的信息。

对于任何节点V,如果V <= x,则V -> left指向的子树的节点都小于x。因此,我们不再需要查看左侧的子树。但是,如果我们遇到的节点大于或等于x,则需要继续递归。让我们用伪代码将所有内容整合在一起

newBST(root):
    if root is null 
        return 
    if root.val >= x
        addNewNode(root.val)
        newBST(root.right)
        newBST(root.left)
    else:
        newBST(root.right)

答案 1 :(得分:0)

递归地执行此操作有些棘手,因为您所拥有的树中的子树与所需树中的子树之间没有1-1对应。

最简单的方法是将> = x的值依次复制到列表中,然后从列表中递归地构建树。​​