问题描述
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回:[3,9,20,15,7]
问题分析
这个是一个比较典型的二叉树广度优先搜索:BSF,主要是利用队列的方式来作为辅助的数据结构;
- 获取队列大小,当前队列的大小表示该层节点个数;
- 调用queue的poll方法逐个打印,并把改节点的左右孩子添加到队列中;
- 获取最终的数组数据;
代码实现
class Solution {public int[] levelOrder(TreeNode root) {if(root == null){return new int[0];}Queue<TreeNode> que = new LinkedList<>();List<Integer> list = new ArrayList<>();que.add(root);while(!que.isEmpty()){//当前层级节点的个数int size = que.size();for(int i=0; i < size; i++){TreeNode node = que.poll();list.add(node.val);if(node.left != null){que.add(node.left);}if(node.right != null){que.add(node.right);}}}int[] result = new int[list.size()];for(int j=0; j<list.size(); j++){result[j] = list.get(j);}return result;}}
