1. 从上到下打印二叉树

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

  1. 例如:
  2. 给定二叉树: [3,9,20,null,null,15,7],
  3. 3
  4. / \
  5. 9 20
  6. / \
  7. 15 7
  8. 返回:
  9. [3,9,20,15,7]

思路:

  • 从上到下遍历:
    • 首先联想到了递归,但是发现真正操作时候,无法将同一层保持在同一段时间上进行输出
    • 因此这里联想到BFS(广度优先搜索),运用队列的特殊性质(先进先出),每输出一个节点的值,就将其左右节点放入队列之中,这样整体保证了每一层从左到右处理完后,再进入下一层。
class Solution {
    public int[] levelOrder(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        if(root!=null){
            queue.add(root);
        }
        while(!queue.isEmpty()){
            TreeNode cur = queue.poll();
            list.add(cur.val);
            if(cur.left!=null) queue.add(cur.left);
            if(cur.right!=null) queue.add(cur.right);
        }
        int[] res = new int[list.size()];
        int count = 0;
        for(int n : list){
            res[count++] = n;
        }
        return res;
    }
}