一.题目:
删除二叉树中指定一节点,并调整二叉树,使结果仍是BST。
二.解题思路:
我们应该逐个访问树上的节点,如果某个节点的值正好是目标值,那么:
若它没有右子树,那么直接用它的左孩子替换它;
若它有右子树.那么将它的值和它右子树中的最小节点的值调换。
代码如下:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
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:
return root.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