103 二叉树的锯齿形层序遍历-中等
题目:
给你二叉树的根节点 root
,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
分析:
正常层序遍历,每层存储结果的时候,先正向再反向。
// date 2023/10/23
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func zigzagLevelOrder(root *TreeNode) [][]int {
res := make([][]int, 0, 16)
if root == nil {
return res
}
queue := make([]*TreeNode, 0, 16)
queue = append(queue, root)
isLeftFirst := true
for len(queue) != 0 {
n := len(queue)
lRes := make([]int, n)
for i := 0; i < n; i++ {
cur := queue[i]
if isLeftFirst {
lRes[i] = cur.Val
} else {
lRes[n-1-i] = cur.Val
}
if cur.Left != nil {
queue = append(queue, cur.Left)
}
if cur.Right != nil {
queue = append(queue, cur.Right)
}
}
queue = queue[n:]
res = append(res, lRes)
isLeftFirst = !isLeftFirst
}
return res
}
最后更新于