Golang | Leetcode Golang题解之第103题二叉树的锯齿形层序遍历

题目:

题解:

Go 复制代码
func zigzagLevelOrder(root *TreeNode) (ans [][]int) {
    if root == nil {
        return
    }
    queue := []*TreeNode{root}
    for level := 0; len(queue) > 0; level++ {
        vals := []int{}
        q := queue
        queue = nil
        for _, node := range q {
            vals = append(vals, node.Val)
            if node.Left != nil {
                queue = append(queue, node.Left)
            }
            if node.Right != nil {
                queue = append(queue, node.Right)
            }
        }
        // 本质上和层序遍历一样,我们只需要把奇数层的元素翻转即可
        if level%2 == 1 {
            for i, n := 0, len(vals); i < n/2; i++ {
                vals[i], vals[n-1-i] = vals[n-1-i], vals[i]
            }
        }
        ans = append(ans, vals)
    }
    return
}
相关推荐
海石1 小时前
【JS击败90%】前缀和+定长滑动窗口
算法·leetcode
Tisfy1 小时前
LeetCode 2685.统计完全连通分量的数量:DFS求每个连通块的边点数
算法·leetcode·深度优先··题解·连通图·全连通分量
海石1 小时前
1次遍历,空间复杂度击败100%,时间复杂度击败85%
算法·leetcode
青山木3 小时前
Hot 100 --- 二叉树与递归
java·数据结构·算法·leetcode·深度优先
张3236 小时前
Go语言基础 Map 函数值 闭包
开发语言·golang
退休倒计时7 小时前
【每日一题】LeetCode 78. 子集 TypeScript
算法·leetcode·typescript
旖-旎7 小时前
《LeetCode 978 最长湍流子数组 || LeetCode 139 单词拆分》
c++·算法·leetcode·动态规划
北冥you鱼7 小时前
Go Modules 使用指南:从入门到精通
开发语言·后端·golang
lueluelue477 小时前
LeetCode:单调栈
算法·leetcode
灯澜忆梦8 小时前
【dp_1】爬楼梯 | 斐波那契数 | 第 N 个泰波那契数 | 三步问题
算法·golang