Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
Example
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
分析:
用两个ArrayList,一个保存当前这行所有的Node, 然后另一个数组保存下一行所有的nodes.
1 /** 2 * Definition of TreeNode: 3 * public class TreeNode { 4 * public int val; 5 * public TreeNode left, right; 6 * public TreeNode(int val) { 7 * this.val = val; 8 * this.left = this.right = null; 9 * } 10 * } 11 */ 12 13 14 public class Solution { 15 /** 16 * @param root: The root of binary tree. 17 * @return: Level order a list of lists of integer 18 */ 19 public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) { 20 ArrayList<ArrayList<Integer>> allLists = new ArrayList<>(); 21 if (root == null) return allLists; 22 23 ArrayList<Integer> nums = new ArrayList<>(); 24 ArrayList<TreeNode> list1 = new ArrayList<>(); 25 ArrayList<TreeNode> list2 = new ArrayList<>(); 26 27 list1.add(root); 28 29 while(list1.size() != 0) { 30 for (TreeNode node : list1) { 31 nums.add(node.val); 32 if (node.left != null) list2.add(node.left); 33 if (node.right != null) list2.add(node.right); 34 } 35 list1.clear(); 36 allLists.add(new ArrayList<Integer>(nums)); 37 nums.clear(); 38 ArrayList<TreeNode> temp = list1; 39 list1 = list2; 40 list2 = temp; 41 } 42 return allLists; 43 } 44 }