博客主页:🏆看看是李XX还是李歘歘 🏆

🌺每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点,以及职场小菜鸡的生活。🌺

💗点关注不迷路,总有一些📖知识点📖是你想要的💗

⛽️今天的内容是   103. 二叉树的锯齿形层序遍历      ⛽️💻💻💻

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

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

队列:

/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func zigzagLevelOrder(root *TreeNode) [][]int {
result := [][]int{}
if root==nil{
return result
}
queue := []*TreeNode{root} //声明队列
for len(queue)>0 {
level :=make([]int,0) //存储本层的值
currentQueue := queue[:] //将队列元素取出来,方便下面遍历
queue = make([]*TreeNode,0 ) //清空队列
for _,value := range currentQueue { //遍历队列
level = append(level,value.Val) //将本层的值存起来
if value.Left!=nil{ //左子树入队列
queue = append(queue, value.Left)
}
if value.Right!=nil{ //右子树入队列
queue = append(queue, value.Right)
}
}
// 用res元素的个数标识奇数偶数层,之后进行反转
if len(result)%2!=0{
for i,j:=0,len(level)-1;i<j;i,j=i+1,j-1{
level[i],level[j]=level[j],level[i]
}
}
result = append(result, level)
}
return result
}

103. 二叉树的锯齿形层序遍历、Leetcode的Go实现_链表