题目描述
方法思路
class Solution {
//Runtime: 3 ms, faster than 98.89%
//Memory Usage: 41.4 MB, less than 35.22%
public TreeNode deleteNode(TreeNode root, int key) {
if(root == null) return root;
if(key < root.val)
root.left = deleteNode(root.left, key);
else if(key > root.val)
root.right = deleteNode(root.right, key);
else if(root.left != null && root.right != null){
//这里也可以找左子树的最大值来解决双子树的问题
root.val = findMin(root.right).val;
root.right = deleteNode(root.right, root.val);
}else
//此时目标节点只有一个子树或者没有子树,问题变得简单起来
root = (root.left != null) ? root.left : root.right;
return root;
}
public TreeNode findMin(TreeNode root){
if(root == null) return root;
TreeNode cur = root;
while(cur.left != null)
cur = cur.left;
return cur;
}
}