File tree Expand file tree Collapse file tree 3 files changed +73
-10
lines changed Expand file tree Collapse file tree 3 files changed +73
-10
lines changed Original file line number Diff line number Diff line change @@ -20,12 +20,10 @@ class BinaryTreeLevelOrderTraversal {
20
20
func levelOrder( root: TreeNode ? ) -> [ [ Int ] ] {
21
21
var res : [ [ Int ] ] = [ ]
22
22
var queue : [ TreeNode ] = [ ]
23
-
24
- if root == nil {
25
- return res
26
- }
27
23
28
- queue. append ( root!)
24
+ if let root = root {
25
+ queue. append ( root)
26
+ }
29
27
30
28
while queue. count > 0 {
31
29
var size : Int = queue. count
@@ -35,7 +33,10 @@ class BinaryTreeLevelOrderTraversal {
35
33
let node : TreeNode = queue [ 0 ]
36
34
queue. removeAtIndex ( 0 )
37
35
36
+ // add val
38
37
level. append ( node. val)
38
+
39
+ // add TreeNodes in next level
39
40
if let left = node. left {
40
41
queue. append ( left)
41
42
}
Original file line number Diff line number Diff line change @@ -24,21 +24,22 @@ class BinaryTreeLevelOrderTraversalII {
24
24
var res : [ [ Int ] ] = [ ]
25
25
var queue : [ TreeNode ] = [ ]
26
26
27
- if root == nil {
28
- return res
27
+ if let root = root {
28
+ queue . append ( root )
29
29
}
30
30
31
- queue. append ( root!)
32
-
33
31
while queue. count > 0 {
34
32
var size : Int = queue. count
35
33
var level : [ Int ] = [ ]
36
34
37
35
for i in 1 ... size {
38
36
let node : TreeNode = queue [ 0 ]
39
37
queue. removeAtIndex ( 0 )
40
-
38
+
39
+ // add val
41
40
level. append ( node. val)
41
+
42
+ // add TreeNodes in next level
42
43
if let left = node. left {
43
44
queue. append ( left)
44
45
}
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Question Link: https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
3
+ * Primary idea: use a queue to help hold TreeNode, and for each level add a new Int array
4
+ *
5
+ * Note: use a boolean value to determine if needs to be added reversely
6
+ *
7
+ * Definition for a binary tree node.
8
+ * public class TreeNode {
9
+ * public var val: Int
10
+ * public var left: TreeNode?
11
+ * public var right: TreeNode?
12
+ * public init(_ val: Int) {
13
+ * self.val = val
14
+ * self.left = nil
15
+ * self.right = nil
16
+ * }
17
+ * }
18
+ *
19
+ */
20
+
21
+ class BinaryTreeZigzagLevelOrderTraversal {
22
+ func zigzagLevelOrder( root: TreeNode ? ) -> [ [ Int ] ] {
23
+ var res : [ [ Int ] ] = [ ]
24
+ var queue : [ TreeNode ] = [ ]
25
+ var isOdd : Bool = false
26
+
27
+ if let root = root {
28
+ queue. append ( root)
29
+ }
30
+
31
+ while queue. count > 0 {
32
+ var size : Int = queue. count
33
+ var level : [ Int ] = [ ]
34
+
35
+ for i in 1 ... size {
36
+ let node : TreeNode = queue [ 0 ]
37
+ queue. removeAtIndex ( 0 )
38
+
39
+ // add val
40
+ if isOdd {
41
+ level. insert ( node. val, atIndex: 0 )
42
+ } else {
43
+ level. append ( node. val)
44
+ }
45
+
46
+ // add TreeNodes in next level
47
+ if let left = node. left {
48
+ queue. append ( left)
49
+ }
50
+ if let right = node. right {
51
+ queue. append ( right)
52
+ }
53
+ }
54
+
55
+ res. append ( level)
56
+ isOdd = !isOdd
57
+ }
58
+
59
+ return res
60
+ }
61
+ }
You can’t perform that action at this time.
0 commit comments