看到一篇非常优秀的二叉树的插入与删除的博客,让我一下子明白了二叉树的删除。用的是为删除的节点赋右子树最小的值。然后删除右子树最小值的节点的方法
转载于:https://www.cnblogs.com/zuoyuan/p/3791801.html
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class BinarySearchTree:
# @param root, a tree node
# @return a list of integers
def Insert(self, root, x):
if root == None:
root = TreeNode(x)
else:
if x < root.val:
root.left = self.Insert(root.left, x)
if x > root.val:
root.right = self.Insert(root.right, x)
return root
def Delete(self, root, x):
if root:
if x < root.val:
root.left = self.Delete(root.left, x)
elif x > root.val:
root.right = self.Delete(root.right, x)
elif root.left and root.right:
tmp = self.FindMin(root.right)
root.val = tmp.val
root.right = self.Delete(root.right, root.val)
else:
tmp = root
if root.left is None: root = root.right
elif root.right is None: root = root.left
return root
def FindMin(self, root):
if root:
while root.left:
root = root.left
return root
def preorder(self, root):
if root:
print root.val
self.preorder(root.left)
self.preorder(root.right)