File tree 1 file changed +13
-24
lines changed
1 file changed +13
-24
lines changed Original file line number Diff line number Diff line change 17
17
*/
18
18
19
19
class BinaryTreeLevelOrderTraversal {
20
- func levelOrder( root: TreeNode ? ) -> [ [ Int ] ] {
20
+ func levelOrder( _ root: TreeNode ? ) -> [ [ Int ] ] {
21
21
var res = [ [ Int] ] ( )
22
- var queue = [ TreeNode] ( )
23
22
24
- if let root = root {
25
- queue . append ( root )
23
+ guard let root = root else {
24
+ return res
26
25
}
27
26
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)
31
34
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 }
48
37
}
49
38
50
39
return res
51
40
}
52
- }
41
+ }
You can’t perform that action at this time.
0 commit comments