题目:
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
I:
return its level order traversal as:
[ [3], [9,20], [15,7] ]II:
return its level order traversal as:
[ [15,7], [9,20], [3] ]就是将一棵二叉树按照层次遍历将每一层的结果存储在一个List<List<Integer>>中。此题LZ用了一半很普通的方法,也就是采用将每一层都遍历,然后将其先存储在一个List中,当然此题的难点在于如何判断一层的结束,这里LZ采用的是用List的长度值来控制的方法,将每一层的节点先加入到一个list中,然后用这个list的长度递减,直到为0。这个方法非常好用。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution
{
public static List<List<Integer>> levelOrder(TreeNode root)
{
List<List<Integer>> list = new ArrayList<List<Integer>>();
//List<Integer> tree = new ArrayList<Integer>();
LinkedList<TreeNode> tree = new LinkedList<TreeNode>();
tree.add(root);
int length = tree.size();
if(root == null)
return list;
else
{
while(!tree.isEmpty()) //这个循环是来用判断List是否为空
{
List<Integer> current = new ArrayList<Integer>();
while(length-- > 0) //这个循环是用来判断每一层是否已经结束
{
TreeNode node = tree.peek();
current.add(node.val);
tree.poll();
if(node.left != null)
tree.add(node.left);
if(node.right != null)
tree.add(node.right);
}
list.add(current);
length = tree.size(); //每一层的长度在这一层的节点都循环一遍之后再重新计算
}
return list;
}
}
}