【发布时间】:2018-08-18 22:04:58
【问题描述】:
我正在尝试实现二叉搜索树的删除功能。逻辑对我来说很有意义,但我无法理解为什么我的代码似乎不起作用。我发现的不同之处在于,从下往上递归地返回更改似乎有效,但在找到节点时简单地删除节点却没有。任何人都可以帮助阐明这一点吗?
我的代码(以及对我最有意义的代码)
def _delete(self, root, value):
if root is None:
return
if value < root.data:
self._delete(root.left, value)
elif value > root.data:
self._delete(root.right, value)
else:
if root.left is not None and root.right is not None:
root.data = self._find_min_value(root.right)
self._delete(root.right, root.data)
elif root.left is not None:
root = root.left
else:
root = root.right
我找到的解决方案
def _delete(self, root, value):
if root is None:
return
if value < root.data:
root.left = self._delete(root.left, value)
elif value > root.data:
root.right = self._delete(root.right, value)
else:
if root.left is not None and root.right is not None:
root.data = self._find_min_value(root.right)
root.right = self._delete(root.right, root.data)
elif root.left is not None:
return root.left
else:
return root.right
return root
【问题讨论】:
标签: python data-structures tree binary-search-tree