题目:
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
知识点:
二叉树,队列的应用。
思路:
例如:输出结果是[[8],[6,10],[5,7,9,11]]
将每层的结点存入队列中,为下一层结点的访问做准备,下一层节点的根节点为存储着上一层节点的队列的队顶。
答案:
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<Integer> al = new ArrayList<Integer>();
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
if(pRoot==null){return list;}
Queue<TreeNode> q = new LinkedList<TreeNode>();//从左向右打印的队列
q.add(pRoot);//初始节点
al.add(pRoot.val);
list.add(al);
while(!q.isEmpty()){//只要队列都不为空,就说明这层还有数据
q = lToR(list,q);//将结果队列传递给从右向左的函数
}
return list;
}
public Queue<TreeNode> lToR(ArrayList<ArrayList<Integer>> list,Queue<TreeNode> q){
ArrayList<Integer> al = new ArrayList<Integer>();
Queue<TreeNode> qTmp = new LinkedList<TreeNode>();
if(q.isEmpty()){return qTmp;}
TreeNode tmp = null;
while(!q.isEmpty()){
tmp = q.poll();
if(tmp.left!=null){
qTmp.add(tmp.left);
al.add(tmp.left.val);
}
if(tmp.right!=null){
qTmp.add(tmp.right);
al.add(tmp.right.val);
}
}
if(!al.isEmpty()) {list.add(al);}
return qTmp;
}
}