Delete Nodes And Return Forest
Description
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]]
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
.
Solution(javascript)
const delNodes = function (root, to_delete = []) {
const map = new Map()
const toDeleteSet = new Set(to_delete)
const aux = (node, currentRoot) => {
if (!node) {
map.set(currentRoot, currentRoot)
return null
}
const { val } = node
if (toDeleteSet.has(val)) {
if (node.left) {
aux(node.left, node.left)
}
if (node.right) {
aux(node.right, node.right)
}
if (node !== currentRoot) {
map.set(currentRoot, currentRoot)
}
return null
}
node.left = aux(node.left, currentRoot)
node.right = aux(node.right, currentRoot)
return node
}
aux(root, root)
return [...map.values()]
}