【题目】
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
【代码】
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode head) {
ArrayList<ArrayList<Integer>> ret=new ArrayList<>();
ArrayList<Integer> li=new ArrayList<>();
Queue<TreeNode> queue=new LinkedList<>();
if(head==null) return ret;
TreeNode last=head;//当前行的最右节点
TreeNode nLast=null;//下一行的最右节点
queue.offer(head);
while(!queue.isEmpty()){
head=queue.poll();
li.add(head.val);//依次把这一行的元素值记录到list里
if(head.left!=null){
queue.offer(head.left);//这一行元素的孩子添加到queue里
nLast=head.left;
}
if(head.right!=null){
queue.offer(head.right);
nLast=head.right;
}
if(head==last){
//当前行打印完了,更新last,把这一行加到ret里
ret.add(new ArrayList<Integer>(li));
last=nLast;
li.clear();
}
}
return ret;
}
}
【层序遍历】
//借助队列实现层序遍历
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list=new ArrayList<Integer>();
if(root==null) return list;
Queue<TreeNode> queue=new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
TreeNode head=queue.poll();
if(head.left!=null) queue.offer(head.left);
if(head.right!=null) queue.offer(head.right);
list.add(head.val);
}
return list;
}