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

Problem

给你二叉树的根节点 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

Solution

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
}

最后更新于

这有帮助吗?