• [Swift]LeetCode1325. 删除给定值的叶子节点 | Delete Leaves With a Given Value


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(let_us_code)
    ➤博主域名:https://www.zengqiang.org
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址: https://www.cnblogs.com/strengthen/p/12213394.html
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Given a binary tree root and an integer target, delete all the leaf nodes with value target.

    Note that once you delete a leaf node with value target, if it's parent node becomes a leaf node and has the value target, it should also be deleted (you need to continue doing that until you can't).

    Example 1:

     

    Input: root = [1,2,3,2,null,2,4], target = 2
    Output: [1,null,3,null,4]
    Explanation: Leaf nodes in green with value (target = 2) are removed (Picture in left). 
    After removing, new nodes become leaf nodes with value (target = 2) (Picture in center).
    Example 2:

     

    Input: root = [1,3,3,3,2], target = 3
    Output: [1,3,null,null,2]
    Example 3:

     

    Input: root = [1,2,null,2,null,2], target = 2
    Output: [1]
    Explanation: Leaf nodes in green with value (target = 2) are removed at each step.
    Example 4:

    Input: root = [1,1,1], target = 1
    Output: []
    Example 5:

    Input: root = [1,2,3], target = 1
    Output: [1,2,3]
     

    Constraints:

    1 <= target <= 1000
    Each tree has at most 3000 nodes.
    Each node's value is between [1, 1000].


    给你一棵以 root 为根的二叉树和一个整数 target ,请你删除所有值为 target 的 叶子节点 。

    注意,一旦删除值为 target 的叶子节点,它的父节点就可能变成叶子节点;如果新叶子节点的值恰好也是 target ,那么这个节点也应该被删除。

    也就是说,你需要重复此过程直到不能继续删除。

    示例 1:

    输入:root = [1,2,3,2,null,2,4], target = 2
    输出:[1,null,3,null,4]
    解释:
    上面左边的图中,绿色节点为叶子节点,且它们的值与 target 相同(同为 2 ),它们会被删除,得到中间的图。
    有一个新的节点变成了叶子节点且它的值与 target 相同,所以将再次进行删除,从而得到最右边的图。
    示例 2:

    输入:root = [1,3,3,3,2], target = 3
    输出:[1,3,null,null,2]
    示例 3:

    输入:root = [1,2,null,2,null,2], target = 2
    输出:[1]
    解释:每一步都删除一个绿色的叶子节点(值为 2)。
    示例 4:

    输入:root = [1,1,1], target = 1
    输出:[]
    示例 5:

    输入:root = [1,2,3], target = 1
    输出:[1,2,3]
     

    提示:

    1 <= target <= 1000
    每一棵树最多有 3000 个节点。
    每一个节点值的范围是 [1, 1000] 。


    Runtime: 40 ms
    Memory Usage: 21.3 MB
     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     public var val: Int
     5  *     public var left: TreeNode?
     6  *     public var right: TreeNode?
     7  *     public init(_ val: Int) {
     8  *         self.val = val
     9  *         self.left = nil
    10  *         self.right = nil
    11  *     }
    12  * }
    13  */
    14 class Solution {
    15     func removeLeafNodes(_ root: TreeNode?, _ target: Int) -> TreeNode? {
    16         if root == nil {return nil}
    17         let left:TreeNode? = removeLeafNodes(root?.left, target)
    18         let right:TreeNode? = removeLeafNodes(root?.right, target)
    19         if left == nil && right == nil && root?.val == target
    20         {
    21             return nil
    22         }
    23         root?.left=left
    24         root?.right=right
    25         return root
    26     }
    27 }
  • 相关阅读:
    webservice未能加载文件或程序集“**.DLL”或它的某一个依赖项。
    四方在线打印控件使用(简介)
    C#图片处理高级应用(裁剪,缩放,清晰度,水印)
    基于Socket实现TCP/IP通讯
    委托
    FTP主配置文件详解
    关于解决RedHat6.0以上版本:Loaded plugins: product-id, refresh-packagekit, security, subscription-manager
    Markdown学习
    网页HTML1,第一天学习。
    实现公众号留言的微信小程序--欢迎大家多多交流
  • 原文地址:https://www.cnblogs.com/strengthen/p/12213394.html
Copyright © 2020-2023  润新知