1110. Delete Nodes And Return Forest

Link

Solution

Tree的問題優先用recursive解看看

這題巧妙運用isDeleted 跟 isRoot的關係,去增加list

    Set<Integer> deletes = new HashSet<>();
    List<TreeNode> list;
    public List<TreeNode> delNodes(TreeNode root, int[] to_delete) {
        list = new LinkedList<>();
        for(int i : to_delete){
            deletes.add(i);
        }
        dfs(root, true);
        return list;
    }
    
    public TreeNode dfs(TreeNode node, boolean isRoot){
        
        if(node == null) return null;
        
        boolean isDeleted = deletes.contains(node.val);
        
        if(isRoot && !isDeleted) list.add(node);
        
        //若本輪node delete成功,那他的左右節點會成為新的root
        node.left = dfs(node.left, isDeleted);
        node.right = dfs(node.right, isDeleted);
        
        return isDeleted ? null : node;
    }

Last updated

Was this helpful?