1110. 删点成林

给出二叉树的根节点 root,树上每个节点都有一个不同的值。

如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。

返回森林中的每棵树。你可以按任意顺序组织答案。

链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number[]} to_delete
* @return {TreeNode[]}
*/
var delNodes = function(root, to_delete) {
const res = []
if (root === null) return res
function dfs(node) {
if (node === null || to_delete.length === 0) return
if (node.left) node.left.parent = node
if (node.right) node.right.parent = node
dfs(node.left)
dfs(node.right)
const index = to_delete.indexOf(node.val)
if (index !== -1) {
to_delete.splice(index, 1)
if (node.parent) {
if (node.parent.left === node) {
node.parent.left = null
} else {
node.parent.right = null
}
}
if (node.left) {
res.push(node.left)
}
if (node.right) {
res.push(node.right)
}
} else if (root === node) {
res.push(node)
}
}

dfs(root)
return res
};