103. 二叉树的锯齿形层序遍历
最后更新于
最后更新于
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[20,9],[15,7]]输入:root = [1]
输出:[[1]]输入:root = []
输出:[]func zigzagLevelOrder(root *TreeNode) [][]int {
if root == nil {
return [][]int(nil)
}
reverse := func(a []int) {
n := len(a)
for i := 0; i < n>>1; i++ {
a[i], a[n-i-1] = a[n-i-1], a[i]
}
}
ans := [][]int{}
q := []*TreeNode{root}
for i := 0; len(q) > 0; i++ {
tmp := q
q = nil
nums := []int{}
for _, node := range tmp {
nums = append(nums, node.Val)
if node.Left != nil {
q = append(q, node.Left)
}
if node.Right != nil {
q = append(q, node.Right)
}
}
if i&1 == 1 {
reverse(nums)
}
ans = append(ans, nums)
}
return ans
}