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
}
相关推荐
wktomo1 小时前
GO语言学习(二)
学习·golang
緈福的街口1 小时前
【leetcode】144. 二叉树的前序遍历
算法·leetcode
你怎么知道我是队长1 小时前
Go语言语法---输入控制
golang
蚂蚁在飞-1 小时前
Golang基础知识—cond
开发语言·后端·golang
李迟1 小时前
Golang实践录:在go中使用curl实现https请求
开发语言·golang·https
Dream it possible!2 小时前
LeetCode 热题 100_寻找重复数(100_287_中等_C++)(技巧)(暴力解法;哈希集合;二分查找)
c++·leetcode·哈希算法
BUG制造机.2 小时前
Go 语言的 GMP 模型
golang
张帅涛_6662 小时前
golang读、写、复制、创建目录、删除、重命名,文件方法总结
golang
运维-大白同学2 小时前
go-数据库基本操作
开发语言·数据库·golang
你怎么知道我是队长2 小时前
GO语言语法---if语句
golang