Skip to content

Commit

Permalink
[Tree] Refactor solution to Binary Tree Level Order Traversal II
Browse files Browse the repository at this point in the history
  • Loading branch information
soapyigu authored Aug 29, 2019
1 parent 7fb52dc commit 27e5b66
Showing 1 changed file with 13 additions and 24 deletions.
37 changes: 13 additions & 24 deletions Tree/BinaryTreeLevelOrderTraversalII.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,36 +20,25 @@
*/

class BinaryTreeLevelOrderTraversalII {
func levelOrderBottom(root: TreeNode?) -> [[Int]] {
func levelOrderBottom(_ root: TreeNode?) -> [[Int]] {
var res = [[Int]]()
var queue = [TreeNode]()

if let root = root {
queue.append(root)
guard let root = root else {
return res
}

while queue.count > 0 {
var size = queue.count
var level = [Int]()
var currentLevel = [root]

while !currentLevel.isEmpty {
let currentLevelVals = currentLevel.map { $0.val }

// add current level vals
res.insert(currentLevelVals, at: 0)

for _ in 1...size {
let node = queue[0]
queue.removeAtIndex(0)

// add val
level.append(node.val)

// add TreeNodes in next level
if let left = node.left {
queue.append(left)
}
if let right = node.right {
queue.append(right)
}
}
res.insert(level, atIndex:0)
// add next level nodes
currentLevel = currentLevel.flatMap { [$0.left, $0.right] }.compactMap { $0 }
}

return res
}
}
}

0 comments on commit 27e5b66

Please sign in to comment.