zoukankan      html  css  js  c++  java
  • [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 }
  • 相关阅读:
    数据中台实战(六):交易分析
    数据中台实战(五):自助分析平台(产品设计篇)
    数据中台实战(四):商品分析(产品设计篇)
    数据中台实战(三):用户分析(产品设计篇)
    数据中台实战(二):基于阿里OneData的数据指标管理体系
    数据中台实战(一):以B2B电商亿订为例,谈谈产品经理视角下的数据埋点
    LeetCode82. 删除排序链表中的重复元素 II
    LeetCode203. 移除链表元素
    LeetCode445. 两数相加 II
    LeetCode2. 两数相加
  • 原文地址:https://www.cnblogs.com/strengthen/p/12213394.html
Copyright © 2011-2022 走看看