如何解决是否可以使用一个指针将节点插入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
同样,此函数返回根,调用者必须将其考虑在内。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。