题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
分析:很明显可以利用队列 先进先出 但题目要求是每一层输出一行 这才是题目的关键。于是应该增加2个变量 来记录队列的长度和当前打印数。
int count =0 ,int len =s.size();
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
/*
* 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
*/
public class Print2 {
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer> > list =new ArrayList<ArrayList<Integer> >();
if(pRoot==null){
return list;
}
Queue<TreeNode> s=new LinkedList<TreeNode>();
s.add(pRoot);
int len =s.size();int count=0;
while(!s.isEmpty()){
ArrayList<Integer> temp=new ArrayList<Integer>();
count =0;len=s.size();
while(count<len){
TreeNode node =s.remove();
temp.add(node.val);
if(node.left!=null){
s.add(node.left);}
if(node.right!=null){
s.add(node.right);}
count++;
}
if(!temp.isEmpty()){
list.add(temp);
}
}
return list;
}
}
还可以使用递归:请参考https://blog.csdn.net/ouyangyanlan/article/details/72876335