Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For 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] ]
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1 / \ 2 3 / 4 \ 5The above binary tree is serialized as
"{1,2,3,#,#,4,#,#,5}"
.
广搜,将节点放入队列中,每指向一个节点删除一个节点,将其左右孩子放入队列,每到一层检查完存入一次数组。
Source
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> s = new ArrayList<List<Integer>>();
if(root == null) return s;
LinkedList<TreeNode> l = new LinkedList<TreeNode>();
l.add(root);
int cur = 1;
int next = 0;
List<Integer> val = new ArrayList<Integer>();
while(!l.isEmpty()){
TreeNode a = l.poll();
cur--;
val.add(a.val);
if(a.left != null){
l.add(a.left);
next ++;
}
if(a.right != null){
l.add(a.right);
next ++;
}
if(cur == 0){
cur = next;
next = 0;
s.add(val);
val = new ArrayList<Integer>(); //不用重新写List val =。。。 注意此条 要在一层检查完的时候进行清理
}
}
return s;
}
Test
public static void main(String[] args){
TreeNode a = new TreeNode(1);
a.left = new TreeNode(2);
a.right = new TreeNode(3);
System.out.println(new Solution().levelOrder(a));
}