450. Delete Node in a BST 发表于 2021-11-19 Recursion123456789101112131415161718192021222324252627282930class Solution { public TreeNode deleteNode(TreeNode root, int key) { if (root == null) { return null; } 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) { return root.right; } else if (root.right == null) { return root.left; } else { // 寻找右子树中的最小值 TreeNode right = root.right; TreeNode node = right; while (node.left != null) { node = node.left; } node.left = root.left; // 把左树挂在右子树上 return right; // 返回右子树作为新的根节点 } } return root; }} 该解法将增加树的高度,不建议使用。 Recursion1234567891011121314151617181920212223242526272829303132333435363738394041424344class Solution { private TreeNode predecessor(TreeNode node) { TreeNode left = node.left; while (left.right != null) { left = left.right; } return left; } private TreeNode successor(TreeNode node) { TreeNode right = node.right; while (right.left != null) { right = right.left; } return right; } public TreeNode deleteNode(TreeNode root, int key) { if (root == null) { return null; } 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) { return null; } else if (root.left != null) { TreeNode predecessor = predecessor(root); root.val = predecessor.val; root.left = deleteNode(root.left, predecessor.val); } else { // root.left == null && root.right != null TreeNode successor = successor(root); root.val = successor.val; root.right = deleteNode(root.right, successor.val); } } return root; }} Reference450. Delete Node in a BST