解题思路
本题数组层次遍历的变种题目,增加dep遍历用于计算当前遍历的层次,如果属于偶数则翻转list
复杂度分析
示例代码
func zigzagLevelOrder(root *TreeNode) [][]int {
if root == nil {
return nil
}
result := [][]int{}
nodes := []*TreeNode{root}
dep := 0
for len(nodes) > 0 {
tmpNodes := []*TreeNode{}
tmpRes := []int{}
dep++
for i := 0; i < len(nodes); i++ {
cur := nodes[i]
tmpRes = append(tmpRes, cur.Val)
if cur.Left != nil {
tmpNodes = append(tmpNodes, cur.Left)
}
if cur.Right != nil {
tmpNodes = append(tmpNodes, cur.Right)
}
}
if dep%2 == 0 {
for i := 0; i < len(tmpRes)/2; i++ {
tmpRes[i], tmpRes[len(tmpRes)-i-1] = tmpRes[len(tmpRes)-i-1], tmpRes[i]
}
}
result = append(result, tmpRes)
nodes = tmpNodes
}
return result
}