一:题目
二:上码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
/**
递归:
1.确定递归参数和返回值
返回值的话 我们这里最终返回的还是TreeNode 因为这里要的还是二叉树。
2.确定递归的终止条件
遍历到所有结点都没找到 返回 null
3.递归体当中可以分为5种情况
1>:未找到key 那么的话我们就返回null
2>:找到了key 但是root.left == null 那么右子树顶替直接返回root.right
3>:找到了key 但是root.right == null 那么右子树顶替直接返回root.left
4>:找到了key 但是左右子树都为空 那么的话 直接删除
5>:找到了key 但是左右子树都不为空 那么的话 我们是root.ringt顶上去,然后将root.left放到
root.left子树中最左下的一个结点旁边,因为root.right中所有的结点是比root.left中的结点
的值大的,那么的话我们我们就需要将root.left子树放到root.right子树中最小的一个结点下面
*/
public TreeNode deleteNode(TreeNode root, int key) {
if (root == null) return null;
if (root.val > key) root.left = deleteNode(root.left,key);
else if (root.val < key) root.right = deleteNode(root.right,key);
else {
System.out.println("wyj");
if (root.left == null && root.right == null) {
root = null;
return root;
} else if (root.left != null && root.right == null) {
root = root.left;
return root;
} else if (root.right != null && root.left == null) {
root = root.right;
return root;
} else {
TreeNode temp = root.right;
while (temp.left != null) {
temp = temp.left;
}
temp.left = root.left;
root = root.right;
System.out.println("wyj");
return root;
}
}
// System.out.println("wyj");
return root;
}
}