|
8 | 8 | * }
|
9 | 9 | */
|
10 | 10 | class Solution {
|
11 |
| - List<TreeNode> forest; |
12 |
| - public List<TreeNode> delNodes(TreeNode root, int[] to_delete) { |
13 |
| - forest = new ArrayList<>(); |
14 |
| - Set<Integer> toDelete = new HashSet<>(); |
15 |
| - for (int val : to_delete) { |
16 |
| - toDelete.add(val); |
17 |
| - } |
18 |
| - |
19 |
| - helper(root, toDelete); |
20 |
| - |
21 |
| - if (!toDelete.contains(root.val)) { |
22 |
| - forest.add(root); |
23 |
| - } |
24 |
| - |
25 |
| - return forest; |
| 11 | + public List<TreeNode> delNodes(TreeNode root, int[] to_delete) { |
| 12 | + List<TreeNode> forest = new ArrayList<>(); |
| 13 | + Set<Integer> set = new HashSet<>(); |
| 14 | + for (int num : to_delete) { |
| 15 | + set.add(num); |
26 | 16 | }
|
27 |
| - |
28 |
| - private TreeNode helper(TreeNode root, Set<Integer> toDelete) { |
29 |
| - if (root == null) { |
30 |
| - return null; |
| 17 | + helper(root, set, forest, null, 0); |
| 18 | + return forest; |
| 19 | + } |
| 20 | + |
| 21 | + private void helper(TreeNode root, Set<Integer> set, List<TreeNode> forest, TreeNode parent, int side) { |
| 22 | + if (root == null) { |
| 23 | + return; |
| 24 | + } |
| 25 | + // Deletion |
| 26 | + if (set.contains(root.val)) { |
| 27 | + if (parent != null) { |
| 28 | + // Decide which node we want to make null based on side |
| 29 | + if (side == -1) { |
| 30 | + parent.left = null; |
31 | 31 | }
|
32 |
| - |
33 |
| - root.left = helper(root.left, toDelete); |
34 |
| - root.right = helper(root.right, toDelete); |
35 |
| - |
36 |
| - if (toDelete.contains(root.val)) { |
37 |
| - if (root.left != null) { |
38 |
| - forest.add(root.left); |
39 |
| - } |
40 |
| - |
41 |
| - if (root.right != null) { |
42 |
| - forest.add(root.right); |
43 |
| - } |
44 |
| - |
45 |
| - return null; |
| 32 | + else { |
| 33 | + parent.right = null; |
46 | 34 | }
|
47 |
| - |
48 |
| - return root; |
| 35 | + } |
| 36 | + // Call the recursive function for left & right with parent as null as we deleted the node |
| 37 | + helper(root.left, set, forest, null, 0); |
| 38 | + helper(root.right, set, forest, null, 0); |
| 39 | + } |
| 40 | + // No Deletion |
| 41 | + else { |
| 42 | + if (parent == null) { // Don't add if we have already added the parent and this is a child node |
| 43 | + forest.add(root); |
| 44 | + } |
| 45 | + helper(root.left, set, forest, root, -1); |
| 46 | + helper(root.right, set, forest, root, 1); |
49 | 47 | }
|
| 48 | + } |
50 | 49 | }
|
0 commit comments