春招打卡|从上到下打印二叉树

229 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述

上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回 [3,9,20,15,7]

二、思路分析

  1. 从上到下打印二叉树,也就是层序遍历二叉树,使用广度优先遍历方式可以完成层序遍历。
  2. 首先创建一个队列q ,将根节点存放进去。
  3. for循环确保q不为空,q为空时说明所有节以及遍历完了。循环中复制队列qtmp,将q置空。此时tmp代表了一层节点,将tmp中的字节逐个遍历,再将这些节点的子节点一一加入q队列中,此时q保存了新一层的节点,q为空时,意味着已经没有子节点能够加入q中了,遍历结束。

三、AC 代码

func levelOrder(root *TreeNode) (ans []int) {
    if root == nil {
        return 
    }
    q := make([]*TreeNode,0)
    q = append(q,root)
    ans = make([]int,0)
    for q != nil {
        tmp := q
        q = nil
        for i := 0;i<len(tmp);i++ {
            node := tmp[i]
            ans = append(ans,node.Val)
            if node.Left != nil {
                q = append(q,node.Left)
            }
            if node.Right != nil {
                q = append(q,node.Right)
            }
        }
    }
    return
}

四、总结

很经典的一道题目,层序遍历,使用广度优先遍历,需要注意的细节是在加入队列第一个元素前,首先要判断root节点是否为空,如果为空则直接返回,避免空指针异常。