利用队列
按之字形顺序打印二叉树
http://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d2efbe0
/*
思路:利用队列,bfs。将队列中一层元素的孩子都一次性添加到队列中。然后根据标志输出正反序
*/
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
if(pRoot == null) return new ArrayList<>(0); //返回空的list
Queue<TreeNode> queue = new LinkedList<>();
ArrayList<ArrayList<Integer>> arraylist = new ArrayList<ArrayList<Integer>>();
queue.add(pRoot);
boolean flag = false; //打印标志,false正着添加,true倒着添加
while(!queue.isEmpty()){
int size = queue.size(); //表示一层的宽度,这个值到0之后,进入下一层
//保存一层的结点数组
ArrayList<Integer> list = new ArrayList<>(size + 1);
for(; size>0; --size){
TreeNode node = queue.poll();
if(node.left != null) queue.add(node.left);
if(node.right != null) queue.add(node.right);
//判断一下标志,决定正序插入还是反序
if(!flag){
//正序
list.add(node.val);
}else{
//反序
list.add(0, node.val); //这个能倒序插入值
}
}
//这一层结束,变换标志,添加进结果集
if(flag == true){
flag = false;
}else{
flag = true;
}
arraylist.add(list);
}
return arraylist;
}
}
顺丰集团工作强度 369人发布