简单易懂的写法:用一个List模拟队列,设置一个每层最后一个节点指针last,每当队头front和last相等,则说明当前已经遍历到该层的最后一个节点,需要把该层的所有元素加到返回结果中。同时,last指针的值也更新为rear即可(当前已经遍历到该层的最后一个节点了,那么这个节点的右子节点必定为下一层的最后一个节点,如果右子节点为空,那么下一层的最后一个节点就是左子节点)。
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型ArrayList<ArrayList<>>
*/
public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
// write code here
int front = 0;
int rear = 0;
int last = 1;
List<TreeNode> list = new ArrayList<TreeNode>();
list.add(root);
rear++;
ArrayList<ArrayList<Integer>> res= new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> temp = new ArrayList<Integer>();
if(root==null)return res;
while(front!=rear){
TreeNode p = list.get(front);
++front;
temp.add(p.val);
if(p.left!=null){
list.add(p.left);
rear++;
}
if(p.right!=null){
list.add(p.right);
rear++;
}
if(last==front){
last = rear;
res.add(new ArrayList<Integer>(temp));
temp.clear();
}
}
return res;
}
}