Skip to content

Commit 7fb52dc

Browse files
authored
[Tree] Refactor solution to Binary Tree Level Order Traversal
1 parent 6d258ca commit 7fb52dc

File tree

1 file changed

+13
-24
lines changed

1 file changed

+13
-24
lines changed

Tree/BinaryTreeLevelOrderTraversal.swift

+13-24
Original file line numberDiff line numberDiff line change
@@ -17,36 +17,25 @@
1717
*/
1818

1919
class BinaryTreeLevelOrderTraversal {
20-
func levelOrder(root: TreeNode?) -> [[Int]] {
20+
func levelOrder(_ root: TreeNode?) -> [[Int]] {
2121
var res = [[Int]]()
22-
var queue = [TreeNode]()
2322

24-
if let root = root {
25-
queue.append(root)
23+
guard let root = root else {
24+
return res
2625
}
2726

28-
while queue.count > 0 {
29-
var size = queue.count
30-
var level = [Int]()
27+
var currentLevel = [root]
28+
29+
while !currentLevel.isEmpty {
30+
let currentLevelVals = currentLevel.map { $0.val }
31+
32+
// add current level vals
33+
res.append(currentLevelVals)
3134

32-
for _ in 1...size {
33-
let node = queue[0]
34-
queue.removeAtIndex(0)
35-
36-
// add val
37-
level.append(node.val)
38-
39-
// add TreeNodes in next level
40-
if let left = node.left {
41-
queue.append(left)
42-
}
43-
if let right = node.right {
44-
queue.append(right)
45-
}
46-
}
47-
res.append(level)
35+
// add next level nodes
36+
currentLevel = currentLevel.flatMap { [$0.left, $0.right] }.compactMap { $0 }
4837
}
4938

5039
return res
5140
}
52-
}
41+
}

0 commit comments

Comments
 (0)