给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
image.png
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func zigzagLevelOrder(root *TreeNode) [][]int {
if root == nil{
return nil
}
res := make([][]int,0,10)
var dfs func(root *TreeNode,level int)
dfs = func (root *TreeNode, level int){
if root == nil{
return
}
if level >= len(res){
res = append(res ,[]int{})
}
if level&1 == 0{
res[level] = append(res[level],root.Val)
}else{
res[level] = append([]int{root.Val},res[level]...)
}
dfs(root.Left,level+1)
dfs(root.Right,level+1)
}
dfs(root,0)
return res
}