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

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

示例 1:

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

示例 2:

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

示例 3:

输入: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
34
35
36
37
38
39
40
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func zigzagLevelOrder(root *TreeNode) [][]int {
if root == nil {
return [][]int{}
}
ans := [][]int{}
que := []*TreeNode{root}

for len(que) > 0 {
n := len(que)
vals := make([]int, n)
for i:=0; i<n; i++ {
// 掐头
nod := que[0]
que = que[1:]
if len(ans) % 2 == 1 {
vals[n-1-i] = nod.Val
} else {
vals[i] = nod.Val
}

if nod.Left != nil {
que = append(que, nod.Left)
}
if nod.Right != nil {
que = append(que, nod.Right)
}
}
ans = append(ans, vals)
}

return ans
}