是否可以使用一个指针将节点插入BST?

问题描述

我想知道是否可以在没有结尾指针y的情况下插入。这是我的代码:

def tree_insert(root,key):
    z = TreeNode(key)
    y = None
    x = root
    while x:
        y = x
        if z.val < x.val:
            x = x.left
        else:
            x = x.right
    if y is None:
        root = z
    elif z.val < y.val:
        y.left = z
    else:
        y.right = z

谢谢!

解决方法

您的函数有一个问题:当函数分配root = x时,调用者将不知道它,因为root是局部变量。

您可以通过多种方式解决此问题。一种是您有一个约定,该约定总是该​​函数返回根。

要避免出现y,您可以在知道应该去哪里的情况下立即分配z

def tree_insert(root,key):
    z = TreeNode(key)
    if not root:
        return z  # new root
    x = root
    while True:
        if z.val < x.val:
            if not x.left:
                x.left = z
                return root
            x = x.left
        else:
            if not x.right:
                x.right = z
                return root
            x = x.right

因此,请按以下方式使用它-始终分配回root

root = None
root = tree_insert(root,5)
root = tree_insert(root,2)
root = tree_insert(root,4)
root = tree_insert(root,8)
root = tree_insert(root,1)

如果将函数转换为递归变量,甚至可以保存更多变量:

def tree_insert(root,key):
    if not root:
        return TreeNode(key)
    if key < root.val:
        root.left = tree_insert(root.left,key)
    else:
        root.right = tree_insert(root.right,key)
    return root

同样,此函数返回根,调用者必须将其考虑在内。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...