• [Swift]LeetCode114. 二叉树展开为链表 | Flatten Binary Tree to Linked List


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

    Given a binary tree, flatten it to a linked list in-place.

    For example, given the following tree:

        1
       / 
      2   5
     /    
    3   4   6
    

    The flattened tree should look like:

    1
     
      2
       
        3
         
          4
           
            5
             
              6

    给定一个二叉树,原地将它展开为链表。

    例如,给定二叉树

        1
       / 
      2   5
     /    
    3   4   6

    将其展开为:

    1
     
      2
       
        3
         
          4
           
            5
             
              6

    20ms
     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 flatten(_ root: TreeNode?) {
    16         guard let root = root else { return }
    17         var l = root.left != nil;
    18         var r = root.right != nil;
    19         flatten(root.left)
    20         flatten(root.right)
    21         if (l && r) {
    22             var left = root.left!;
    23             let right = root.right;
    24             root.right = left;
    25             root.left = nil;
    26             while (left.right != nil) {
    27                 left = left.right!;
    28             }
    29             left.right = right;
    30         } else if (l) {
    31             root.right = root.left;
    32             root.left = nil;
    33         }
    34     }
    35 }

    20ms

     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 flatten(_ root: TreeNode?) {
    16         if root == nil {
    17             return
    18         } else {
    19             flatten(root!.left)
    20             flatten(root!.right)
    21             if var node = root!.left {
    22                 while node.right != nil {
    23                     node.left = nil
    24                     node = node.right!
    25                 }
    26                 node.right = root!.right
    27                 root!.right = root!.left
    28                 root!.left = nil
    29             }
    30         }
    31     }
    32 }

    24ms

     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     var pre : TreeNode?
    16     func flatten(_ root: TreeNode?) {
    17         if root == nil{
    18             return
    19         }
    20         flatten(root?.right)
    21         flatten(root?.left)
    22         root?.right = pre
    23         root?.left = nil
    24         pre = root
    25     }
    26 }

    28ms

     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 flatten(_ root: TreeNode?) {
    16         helper(root)
    17     }
    18     
    19     private func helper(_ node: TreeNode?) -> TreeNode? {
    20         var node = node
    21         if node == nil {
    22             return node
    23         }
    24         if node!.left == nil && node!.right == nil {
    25             return node
    26         }
    27         
    28         let left = node!.left, right = node!.right
    29         node!.left = nil
    30         
    31         if let left = left {
    32             node!.right = left
    33             node = helper(left)
    34         }
    35         if let right = right {
    36             node!.right = right
    37             node = helper(right)
    38         }
    39         
    40         return node
    41     }
    42 }

     40ms

     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     var array = [Int]()
    16     func flatten(_ root: TreeNode?) {
    17         if(root == nil){ return }
    18         traverse(root)
    19         root!.left = nil
    20         root!.right = nil
    21         var currentNode = root
    22         for index in 1 ..< array.count{
    23             currentNode!.right = TreeNode(array[index])
    24             currentNode = currentNode!.right
    25         }
    26     }
    27     func traverse(_ root: TreeNode?){
    28         if(root == nil){ return }
    29         self.array.append(root!.val)
    30         traverse(root!.left)
    31         traverse(root!.right)
    32     }
    33 }
  • 相关阅读:
    hdu 1301 Jungle Roads
    hdu 1233 还是畅通工程
    12.3日周二学习笔记
    12.2周一学习记录
    12.1周日学习记录
    浅表副本
    DL项目代码目录结构管理
    因子分析
    relu非线性映射函数,能拟合任意函数吗
    神经网络拟合连续函数
  • 原文地址:https://www.cnblogs.com/strengthen/p/9951931.html
Copyright © 2020-2023  润新知