问题描述
我想知道是否可以在没有结尾指针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
同样,此函数返回根,调用者必须将其考虑在内。