题目:
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
解法:
隔行反转,或者有双端队列也行
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func zigzagLevelOrder(root *TreeNode) [][]int {
ans := make([][]int, 0)
flag := 1
list := make([]*TreeNode, 0)
if root != nil {
list = append(list, root)
}
for len(list) != 0 {
length := len(list)
arr := make([]int, 0)
for i := 0; i < length; i ++ {
arr = append(arr, list[i].Val)
if list[i].Left != nil {
list = append(list, list[i].Left)
}
if list[i].Right != nil {
list = append(list, list[i].Right)
}
}
if flag == -1 {
swap(arr)
}
ans = append(ans, arr)
list = list[length:]
flag = -1 * flag
}
return ans
}
func swap(arr []int){
i, j := 0, len(arr) - 1
for ; i < j; i, j = i + 1, j - 1 {
arr[i], arr[j] = arr[j], arr[i]
}
}