Javat通过BFS解法
按之字形顺序打印二叉树
http://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d2efbe0
实现思路:
- 主要的方法与BFS写法没什么区别
- BFS里是每次只取一个,而我们这里先得到队列长度size,这个size就是这一层的节点个数,然后通过for循环去poll出这size个节点,这里和按行取值二叉树返回ArrayList<ArrayList<Integer>>这种题型的解法一样,之字形取值的核心思路就是通过两个方法:
- list.add(T): 按照索引顺序从小到大依次添加
- list.add(index, T): 将元素插入index位置,index索引后的元素依次后移,这就完成了每一行元素的倒序,或者使用Collection.reverse()方法倒序也可以
import java.util.LinkedList; public class Solution { public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { LinkedList<TreeNode> q = new LinkedList<>(); ArrayList<ArrayList<Integer>> res = new ArrayList<>(); boolean rev = true; q.add(pRoot); while(!q.isEmpty()){ int size = q.size(); ArrayList<Integer> list = new ArrayList<>(); for(int i=0; i<size; i++){ TreeNode node = q.poll(); if(node == null){continue;} if(rev){ list.add(node.val); }else{ list.add(0, node.val); } q.offer(node.left); q.offer(node.right); } if(list.size()!=0){res.add(list);} rev=!rev; } return res; } }