层次遍历的变形,利用一个队列,然后将结点放进去,一次遍历一行,但是得判断奇偶行,第一行从左到右输出,第二行从右到左输出,所以我们维护一个变量dep,每遍历一行就+1。
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> res = new ArrayList<>(); if(pRoot == null) return res; Queue<TreeNode> q = new LinkedList<>(); q.add(pRoot); int dep = 0; while(!q.isEmpty()){ LinkedList<Integer> list = new LinkedList<>(); int size = q.size(); for(int i = 0; i < size; i++){ TreeNode node = q.poll(); if(dep%2 == 0){ list.add(node.val); }else{ list.addFirst(node.val); } if(node.left != null) q.add(node.left); if(node.right != null) q.add(node.right); } dep++; res.add(new ArrayList(list)); } return res; }