思路
和前两题一样,都可以使用bfs逐层进行扫描,不过在扫描的时候需要记录此时的层数,若层数为奇数,则不变从左到右添加结果,否则则将此层扫描的结果进行翻转然后加到结果list中去。还是采用层次遍历的方式,比较简单。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> re=new ArrayList<>();
if(root==null) return re;
TreeNode[] q=new TreeNode[2001];
int start=0,end=0,height=0;
q[++end]=root;
while(start<end){
height++;
int size=end-start;
List<Integer> sub=new ArrayList<>();
int count=0;
while(count<size){
TreeNode cursor=q[++start];
sub.add(cursor.val);
if(cursor.left!=null) q[++end]=cursor.left;
if(cursor.right!=null) q[++end]=cursor.right;
count++;
}
if((height&1)==0) Collections.reverse(sub);
re.add(sub);
}
return re;
}
}