LeetCode-103.二叉树的锯齿形层序遍历

题目描述

给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

示例1

1
2
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[20,9],[15,7]]

示例2

1
2
输入:root = [1]
输出:[[1]]

示例3

1
2
输入:root = []
输出:[]

提示:

  • 树中节点数目在范围 [0, 2000]
  • -100 <= Node.val <= 100

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
func zigzagLevelOrder(_ root: TreeNode?) -> [[Int]] {
guard let root = root else {
return []
}

var res = [[Int]]()
var queue = [root]

var isLeft2Right = true
while !queue.isEmpty {
var levelRes = [Int]()
var length = queue.count
while length > 0 {
let cur = queue.removeFirst()
if isLeft2Right {
levelRes.append(cur.val)
} else {
levelRes.insert(cur.val, at: 0)
}
if let left = cur.left {
queue.append(left)
}
if let right = cur.right {
queue.append(right)
}
length -= 1
}
isLeft2Right = !isLeft2Right
res.append(levelRes)
}

return res
}