Delete Nodes And Return Forest
给一个数, 给一个数组, 删除树上的数组的节点. 然后返回删除后的森林(不连接的节点)
这题注意的是删完后要看下是否有root….
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<TreeNode> delNodes(TreeNode root, int[] to_delete) {
List<TreeNode> res = new ArrayList<>();
Set<Integer> d = new HashSet<>();
for(int n: to_delete)
d.add(n);
if(!d.contains(root.val))
res.add(root);
inorder(res, root, d);
return res;
}
public TreeNode inorder(List<TreeNode> res, TreeNode root, Set<Integer> d){
if(root == null)
return null;
root.left = inorder(res, root.left, d);
root.right = inorder(res, root.right, d);
if(d.contains(root.val)){
d.remove(root.val);
if(root.left != null)
res.add(root.left);
if(root.right != null)
res.add(root.right);
return null;
}
return root;
}
}