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

64 阅读1分钟

题目连接

解题思路

本题数组层次遍历的变种题目,增加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
}