go解题答案

  • 时间复杂度O(n)
  • 思路概括:双队列
  • 思路核心:
    1、每层一个数组,所以外层循环构造层数,内层循环将节点值填入
    2、使用两个队列,第一个用于遍历本层节点,第二个用于把本层关联的下层节点加入,然后调换。
    func levelOrder( root *TreeNode ) [][]int {
      // 第一 层数
      if root==nil {
          return  nil
      }
      stack:=[]*TreeNode{root}
      res:=make([][]int,0)
      for i:=0;len(stack)>0;i++{ // 每循环一次就是一层,直到stack空
          res=append(res,[]int{})
          levelNode:=[]*TreeNode{} // 存储下层节点
          for j:=0;j<len(stack);j++{
              cur:=stack[j]
              res[i] = append(res[i],cur.Val)
              if cur.Left !=nil {
                  levelNode=append(levelNode,cur.Left)   
              }
              if cur.Right !=nil {
                  levelNode=append(levelNode,cur.Right)   
              }
          }
          stack=levelNode
      }
      return res
    }

    如果有帮助请点个赞哦, 更多文章请看我的博客

    题主背景

  • 从业8年——超级内卷500Q技术经理——目前专注go和微服务架构