用递归做 代码看起来简洁点
以下是用运行时间的增加换取了代码的整洁
如果key的右节点存在那么key的值和右节点的最最最最…左节点的值交换 继续递归直到再一次找到key值
也就是说会操作两次 但还是能满足了O(h)的运行时间
class Solution:
def deleteNode(self, root, key):
"""
:type root: TreeNode
:type key: int
:rtype: TreeNode
"""
if not root: return None
if root.val==key:
if not root.right:
left=root.left
return left
else:
right=root.right
while right.left:
right=right.left
root.val,right.val=right.val, root.val
root.left=self.deleteNode(root.left,key)
root.right=self.deleteNode(root.right,key)
return root