1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| class 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 && root.right == null) { root = null; } else if (root.left != null && root.right == null) { root = root.left; } else if (root.left == null && root.right != null) { root = root.right; } else { TreeNode predecessor = findPredecessor(root); root.val = predecessor.val; root.left = deleteNode(root.left, root.val); } } return root; }
private TreeNode findPredecessor(TreeNode node) { node = node.left; while (node.right != null) { node = node.right; } return node; } }
|
定义递归函数的功能就是给定一个树, 删除我们指定值对应的node然后返回这个树的root, 如果树中没有node等于指定的值, 什么也不做.
时间复杂度: O(n) 可能是skewed tree
空间复杂度: O(n) 可能是skewed tree