面试题32 - I. 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3 / 9 20 / 15 7
返回:
[3,9,20,15,7]
提示:
节点总数 <= 1000
class Solution { public int[] levelOrder(TreeNode root) { if(root == null){ return new int[]{}; } List<Integer> list = new ArrayList<>(); Queue<TreeNode> que= new LinkedList<>(); que.offer(root); while(!que.isEmpty()){ int size = que.size(); while(size-- > 0){ TreeNode node = que.poll(); list.add(node.val); if(node.left != null){ que.add(node.left); } if(node.right != null){ que.add(node.right); } } } //注意不能直接用list.toArray(new int[0]); //若用 : // List<Integer> 转 Integer[] // Integer[] integers2 = list1.toArray(new Integer[0]); // 调用toArray。传入参数T[] a。这种用法是目前推荐的。 // List<String>转String[]也同理。 // List<Integer> 转 int[] // int[] arr1 = list1.stream().mapToInt(Integer::valueOf).toArray(); // 想要转换成int[]类型,就得先转成IntStream。 // 这里就通过mapToInt()把Stream<Integer>调用Integer::valueOf来转成IntStream // 而IntStream中默认toArray()转成int[]。 int[] arr = new int[list.size()]; for(int i = 0;i < list.size();i++){ arr[i] = list.get(i); } return arr; } }