103. 二叉树的锯齿形层序遍历
二叉树的锯齿形层序遍历
题目描述:
给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回锯齿形层序遍历如下:
[
[3],
[20,9],
[15,7]
]
思路:
跟102很相似,用队列来做,就是输入到arr的时候输入次序
代码:
func zigzagLevelOrder(root *TreeNode) [][]int {
var arr [][]int
if root==nil{
return arr
}
qu:=[]*TreeNode{root}
for level:=0;len(qu)>0;level++{
arr=append(arr,[]int{})
p:=[]*TreeNode{}
for i:=0;i<len(qu);i++{
if qu[i].Left!=nil{
p=append(p,qu[i].Left)
}
if qu[i].Right !=nil{
p=append(p,qu[i].Right)
}
}
if level%2==1{
for j:=len(qu)-1;j>=0;j--{
arr[level]=append(arr[level],qu[j].Val)
}
}else{
for j:=0;j<len(qu);j++{
arr[level]=append(arr[level],qu[j].Val)
}
}
qu=p
}
return arr
}
代码效率:
执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗:2.5 MB, 在所有 Go 提交中击败了79.52%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!