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 34 35 36 37 38
| class Solution { public List<TreeNode> delNodes(TreeNode root, int[] to_delete) { Set<Integer> set = new HashSet<>(); for (int val : to_delete) { set.add(val); }
List<TreeNode> resultList = new ArrayList<>(); dfs(set, resultList, null, null, false, root); return resultList; }
private void dfs(Set<Integer> set, List<TreeNode> resultList, TreeNode root, TreeNode parent, boolean toLeft, TreeNode node) { if (node == null) { return; }
if (set.contains(node.val)) { if (parent != null) { if (toLeft) { parent.left = null; } else { parent.right = null; } } dfs(set, resultList, null, node, true, node.left); dfs(set, resultList, null, node, false, node.right); } else { if (root == null) { root = node; resultList.add(root); }
dfs(set, resultList, root, node, true, node.left); dfs(set, resultList, root, node, false, node.right); } } }
|