二叉树的层次遍历

题目描述:

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

例如:
给定二叉树: [3,9,20,null,null,15,7],

二叉树的层次遍历

思路:

运用队列记录每一层的节点,定义一个变量记录本层节点数目,以便于创建新列表操作。

public static List<List<Integer>> levelOrder(TreeNode root) {
	List<List<Integer>> l = new ArrayList<List<Integer>>();
	List<Integer> ll;
	Queue<TreeNode> q = new LinkedList<TreeNode>();
	if(root==null)return l;
	
	TreeNode temp ;
	q.add(root);
	while(true) {
		int size = q.size();//此时队列大小
		ll = new ArrayList<Integer>();
		while(size>0) {
			temp = q.poll();
			ll.add(temp.val);
			size--;
			if(temp.left!=null) {
				q.add(temp.left);
			}
			if(temp.right!=null) {
				q.add(temp.right);
			}
		}
		l.add(ll);
		if(q.size()==0)break;
	}
	return l;
}