• [Swift]LeetCode669. 修剪二叉搜索树 | Trim a Binary Search Tree


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10492482.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so that all its elements lies in [L, R] (R >= L). You might need to change the root of the tree, so the result should return the new root of the trimmed binary search tree.

    Example 1:

    Input: 
        1
       / 
      0   2
    
      L = 1
      R = 2
    
    Output: 
        1
          
           2 

    Example 2:

    Input: 
        3
       / 
      0   4
       
        2
       /
      1
    
      L = 1
      R = 3
    
    Output: 
          3
         / 
       2   
      /
     1

    给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。

    示例 1:

    输入: 
        1
       / 
      0   2
    
      L = 1
      R = 2
    
    输出: 
        1
          
           2
    

    示例 2:

    输入: 
        3
       / 
      0   4
       
        2
       /
      1
    
      L = 1
      R = 3
    
    输出: 
          3
         / 
       2   
      /
     1

    68ms
     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 trimBST(_ root: TreeNode?, _ L: Int, _ R: Int) -> TreeNode? {
    16         guard let r = root else { return nil }
    17         
    18         if r.val > R { return trimBST(r.left, L, R) }
    19         if r.val < L { return trimBST(r.right, L, R) }
    20         
    21         r.left = trimBST(r.left, L, R)
    22         r.right = trimBST(r.right, L, R)
    23         
    24         return r
    25     }
    26 }

    84ms

     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 trimBST(_ root: TreeNode?, _ L: Int, _ R: Int) -> TreeNode? {
    16         guard let root = root else {
    17             return nil 
    18         }
    19         
    20         var resultTree: TreeNode? = nil 
    21         preorderTraversal(root) {
    22             val in 
    23             if val >= L && val <= R {
    24                 resultTree = addNode(resultTree, val)
    25             }
    26         }
    27         return resultTree
    28     }
    29 }
    30 
    31 func addNode(_ root: TreeNode?, _ val: Int) -> TreeNode {
    32     guard let root = root else {
    33         return TreeNode(val)
    34     }
    35     
    36     if val <= root.val {
    37         root.left = addNode(root.left, val)
    38     } else {
    39         root.right = addNode(root.right, val)
    40     }
    41     return root
    42 }
    43 
    44 func preorderTraversal(_ root: TreeNode?, _ visit: (Int) -> Void) {
    45     guard let root = root else {
    46         return 
    47     }
    48     visit(root.val)
    49     preorderTraversal(root.left, visit)
    50     preorderTraversal(root.right, visit)
    51 }

    96ms

     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 trimBST(_ root: TreeNode?, _ L: Int, _ R: Int) -> TreeNode? {
    16         guard let r = root else {
    17             return nil 
    18         }
    19         if r.val < L {
    20             return trimBST(r.right, L, R)
    21         } else if r.val > R {
    22             return trimBST(r.left, L, R)
    23         }
    24         r.left = trimBST(r.left, L, R)
    25         r.right = trimBST(r.right, L, R)
    26         return r
    27     }
    28     
    29     func deleteNode(_ node: TreeNode) -> TreeNode?{
    30         if node.left == nil {
    31             return node.right
    32         } else if node.right == nil {
    33             return node.left
    34         } else {
    35             return insert(root: node.left, node: node.right!)
    36         }
    37     }
    38     
    39     func insert(root: TreeNode?, node: TreeNode) -> TreeNode {
    40         guard var n = root else {
    41             return node
    42         }
    43         
    44         if node.val < n.val {
    45             if n.left == nil {
    46                 n.left = node
    47             } else {
    48                 n.left = insert(root: n.left, node: node)
    49             }
    50         } else {
    51             if n.right == nil {
    52                 n.right = node
    53             } else {
    54                 n.right = insert(root: n.right, node: node)
    55             }
    56         }
    57         
    58         return node
    59     }
    60 }
  • 相关阅读:
    div弹出层
    经典SQL语句
    sql连接及操作
    给flash加上连接
    在c#中图片原比例缩放
    悬浮提示筐
    拖动板块
    IFrame自适应高度
    SQL语句中的日期计算
    注意Request.Cookies["UserID"]的用法
  • 原文地址:https://www.cnblogs.com/strengthen/p/10492482.html
Copyright © 2020-2023  润新知