1110. Delete Nodes And Return Forest
Problem
Given the root
of a binary tree, each node in the tree has a distinct value.
After deleting all nodes with a value in to_delete
, we are left with a forest (a disjoint union of trees).
Return the roots of the trees in the remaining forest. You may return the result in any order.
Example 1:
Input: root = [1,2,3,4,5,6,7], to_delete = [3,5]
Output: [[1,2,null,4],[6],[7]]
Example 2:
Input: root = [1,2,4,null,3], to_delete = [3]
Output: [[1,2,4]]
Constraints:
- The number of nodes in the given tree is at most
1000
. - Each node has a distinct value between
1
and1000
. to_delete.length <= 1000
to_delete
contains distinct values between1
and1000
.
Code
/**
* 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) {
Set<Integer> delete = new HashSet<>();
for (int i : to_delete) delete.add(i);
List<TreeNode> res = new ArrayList<>();
if (!delete.contains(root.val)) res.add(root);
dfs(root, delete, res);
return res;
}
private TreeNode dfs(TreeNode node, Set<Integer> delete, List<TreeNode> res) {
if (node == null) {
return null;
}
node.left = dfs(node.left, delete, res);
node.right = dfs(node.right, delete, res);
if (delete.contains(node.val)) {
if (node.left != null) res.add(node.left);
if (node.right != null) res.add(node.right);
return null;
}
return node;
}
}
按 <- 键看上一题!
1107. New Users Daily Count
按 -> 键看下一题!
1112. Highest Grade For Each Student