[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 }
原文地址:https://www.cnblogs.com/strengthen/p/9951931.html