一:题目
二:上码
/*** 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.right3>:找到了key 但是root.right == null 那么右子树顶替直接返回root.left4>:找到了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;}
}