Skip to content

Commit c79c44e

Browse files
committed
Merge pull request soapyigu#4 from soapyigu/Tree
[Tree] add solution to Binary Tree Zigzag Level Order Traversal
2 parents fcbf0df + 9484f1d commit c79c44e

File tree

3 files changed

+73
-10
lines changed

3 files changed

+73
-10
lines changed

Tree/BinaryTreeLevelOrderTraversal.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@ class BinaryTreeLevelOrderTraversal {
2020
func levelOrder(root: TreeNode?) -> [[Int]] {
2121
var res: [[Int]] = []
2222
var queue:[TreeNode] = []
23-
24-
if root == nil {
25-
return res
26-
}
2723

28-
queue.append(root!)
24+
if let root = root {
25+
queue.append(root)
26+
}
2927

3028
while queue.count > 0 {
3129
var size: Int = queue.count
@@ -35,7 +33,10 @@ class BinaryTreeLevelOrderTraversal {
3533
let node: TreeNode = queue[0]
3634
queue.removeAtIndex(0)
3735

36+
// add val
3837
level.append(node.val)
38+
39+
// add TreeNodes in next level
3940
if let left = node.left {
4041
queue.append(left)
4142
}

Tree/BinaryTreeLevelOrderTraversalII.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,22 @@ class BinaryTreeLevelOrderTraversalII {
2424
var res: [[Int]] = []
2525
var queue: [TreeNode] = []
2626

27-
if root == nil {
28-
return res
27+
if let root = root {
28+
queue.append(root)
2929
}
3030

31-
queue.append(root!)
32-
3331
while queue.count > 0 {
3432
var size: Int = queue.count
3533
var level: [Int] = []
3634

3735
for i in 1...size {
3836
let node: TreeNode = queue[0]
3937
queue.removeAtIndex(0)
40-
38+
39+
// add val
4140
level.append(node.val)
41+
42+
// add TreeNodes in next level
4243
if let left = node.left {
4344
queue.append(left)
4445
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
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+
}

0 commit comments

Comments
 (0)