主要框架还是那三个,等于,小于,大于
小于就到右子树去,大于就到左子树去
等于时判断三种情况
无左右子树 return null
无左子树或无右子树 return root.right\return root.left
既有左子树又有右子树 找到右子树上的最小值,替换后删除
class Solution {
public TreeNode deleteNode(TreeNode root, int key) {
if(root == null){
return null;
}
if(root.val == key){
if(root.left==null&&root.right==null){
return null;
}
if(root.left == null){
return root.right;
}
if(root.right == null){
return root.left;
}
TreeNode minNode = getMin(root.right);
root.right = deleteNode(root.right,minNode.val);
minNode.left = root.left;
minNode.right = root.right;
root = minNode;
}else if(root.val<key){
root.right = deleteNode(root.right,key);
}else if(root.val>key){
root.left = deleteNode(root.left,key);
}
return root;
}
public TreeNode getMin(TreeNode root){
while(root.left != null){
root = root.left;
}
return root;
}
}