Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
Tree related problems are very hard to understand for me. So far, this one is the most complicate.
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> list = new ArrayList<Integer>();
if(root==null) {
return res;
}
LinkedList<TreeNode> curQueue = new LinkedList<TreeNode>();
int count=0;
curQueue.add(root);
while(!curQueue.isEmpty()){
count = curQueue.size();
while(count>0){
TreeNode n = curQueue.poll();
list.add(n.val);
count--;
if(n.left != null)
curQueue.add(n.left);
if(n.right != null)
curQueue.add(n.right);
// list.add(n.val);
}
res.add(new ArrayList<Integer>(list));
list.clear();
}
return res;
}
}