给出二叉树的根节点 root
,树上每个节点都有一个不同的值。
如果节点值在 to_delete
中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。
返回森林中的每棵树。你可以按任意顺序组织答案。
示例:
输入:root = [1,2,3,4,5,6,7], to_delete = [3,5] 输出:[[1,2,null,4],[6],[7]]
提示:
- 树中的节点数最大为
1000
。 - 每个节点都有一个介于
1
到1000
之间的值,且各不相同。 to_delete.length <= 1000
to_delete
包含一些从1
到1000
、各不相同的值。
Idea: Recursion, gathering information from left and right subtrees
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def delNodes(self, root: TreeNode, to_delete: List[int]) -> List[TreeNode]: def helper(root): if not root: return [] ls = helper(root.left) rs = helper(root.right) rl,rr=root.left,root.right root.left,root.right=None,None if root.val not in to_delete: merge=[] for l in ls: if l.val!=rl.val: merge.append(l) else: root.left=l for r in rs: if r.val!=rr.val: merge.append(r) else: root.right=r merge.append(root) else: merge = ls+rs return merge return helper(root)