Skip to content

Commit

Permalink
Merge pull request soapyigu#190 from soapyigu/LinkedList
Browse files Browse the repository at this point in the history
[LinkedList] Add a solution to Flatten Binary Tree to Linked List
  • Loading branch information
soapyigu authored Dec 28, 2016
2 parents 19a3358 + 5cd3d6a commit 561d4a6
Showing 1 changed file with 47 additions and 0 deletions.
47 changes: 47 additions & 0 deletions LinkedList/FlattenBinaryTreeLinkedList.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/**
* Question Link: https://leetcode.com/problems/flatten-binary-tree-to-linked-list/
* Primary idea: Reset left to nil and change current node to left child every time
* Time Complexity: O(n), Space Complexity: O(1)
*
* Definition for a binary tree node.
* public class TreeNode {
* public var val: Int
* public var left: TreeNode?
* public var right: TreeNode?
* public init(_ val: Int) {
* self.val = val
* self.left = nil
* self.right = nil
* }
* }
*/

class FlattenBinaryTreeLinkedList {
func flatten(_ root: TreeNode?) {
helper(root)
}

private func helper(_ node: TreeNode?) -> TreeNode? {
var node = node
if node == nil {
return node
}
if node!.left == nil && node!.right == nil {
return node
}

let left = node!.left, right = node!.right
node!.left = nil

if let left = left {
node!.right = left
node = helper(left)
}
if let right = right {
node!.right = right
node = helper(right)
}

return node
}
}

0 comments on commit 561d4a6

Please sign in to comment.