定义一个队列queue和一个last指针以及nLast指针,先将根节点push到queue中,从队列中pop出一个节点然后将节点的左孩子和右孩子分别push到queue中。nLast一直是跟随着最近一个被push的结点。当last等于刚pop出的结点时,向二维列表中添加一次数据并让last=nLast。循环执行,直到队列为空。
import java.util.ArrayList;
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<ArrayList<Integer>> list=new ArrayList<>();
ArrayList<Integer> lst=new ArrayList<>();
Queue<TreeNode> queue=new LinkedList<>();
TreeNode last=pRoot;
TreeNode nLast=pRoot;
if(pRoot==null){
return list;
}
queue.add(pRoot);
ArrayList<Integer> tt=new ArrayList<>();
tt.add(pRoot.val);
list.add(tt);
while(!queue.isEmpty()){
TreeNode temp=queue.poll();
if(temp.left!=null){
queue.add(temp.left);
nLast=temp.left;
lst.add(temp.left.val);
}
if(temp.right!=null){
queue.add(temp.right);
nLast=temp.right;
lst.add(temp.right.val);
}
if(last==temp){
last=nLast;
if(!lst.isEmpty()){
ArrayList<Integer> t=new ArrayList<>(lst);
list.add(t);
lst.clear();
}
}
}
return list;
}
}