博客主页:🏆看看是李XX还是李歘歘 🏆
🌺每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点,以及职场小菜鸡的生活。🌺
💗点关注不迷路,总有一些📖知识点📖是你想要的💗
⛽️今天的内容是 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
}