1110.删点成林
根节点不是删除节点的话加入森林,前序遍历二叉树,当前节点为删除结点且他左右孩子不为空,则左右孩子加入森林,并将当前树设为空。
class Solution {
private boolean[] flag=new boolean[1001];
public List<TreeNode> delNodes(TreeNode root, int[] to_delete) {
for(int x:to_delete) flag[x]=true;
ArrayList<TreeNode> arr = new ArrayList<TreeNode>();
if(!flag[root.val]) arr.add(root);
dfs(root,arr);
return arr;
}
public TreeNode dfs(TreeNode tree,ArrayList<TreeNode> arr) {
if(tree==null) return null;
tree.left=dfs(tree.left,arr);
tree.right=dfs(tree.right,arr);
if(flag[tree.val]){
if(tree.left!=null) arr.add(tree.left);
if(tree.right!=null) arr.add(tree.right);
tree=null;
}
return tree;
}
}