class Solution {
/*
when to add curNode to list?-> if parentNode is being deleted and curNode is not delete
*/
public List<TreeNode> delNodes(TreeNode root, int[] to_delete) {
List<TreeNode> res = new ArrayList<>();
if (root == null) {
return res;
}
Set<Integer> toDelete = new HashSet<>();
for (int delete : to_delete) {
toDelete.add(delete);
}
helper(res, toDelete, root, null);
return res;
}
//return new tree of cur after processing
//check whether cur needs to be deleted
//D& C
private TreeNode helper(List<TreeNode> res, Set<Integer> toDelete, TreeNode cur, TreeNode parent) {
if (cur == null) return null;
cur.left = helper(res, toDelete, cur.left, cur);
cur.right = helper(res, toDelete, cur.right, cur);
//when to add to res
if (toDelete.contains(cur.val)) {
return null;
} else {
//2 conditions:cur== rot | parent is to delete
if (parent == null || toDelete.contains(parent.val)) {
res.add(cur);
}
}
return cur;
}
}