zoukankan      html  css  js  c++  java
  • 1110. 删点成林

    给出二叉树的根节点 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)
        
     
  • 相关阅读:
    流程控制之if判断
    各种运算符
    输入和输出
    垃圾回收机制(详细)
    3/5 作业
    3/4 作业
    数据类型
    变量
    Checkout 显示 URL /../../.. 不存在
    Tomcat8 访问 manager App 失败
  • 原文地址:https://www.cnblogs.com/xxxsans/p/14048229.html
Copyright © 2011-2022 走看看