按之字形顺序打印二叉树
按之字形顺序打印二叉树
http://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d2efbe0
public class Solution { public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer> > result = new ArrayList<>(); if (pRoot == null) { return result; } // 开辟一个双端队列,方便后面操作 Deque<TreeNode>queue = new LinkedList<>(); // odd为true是奇数行 boolean odd = true; queue.addFirst(pRoot); while (!queue.isEmpty()) { ArrayList<Integer> array = new ArrayList<>(); int size = queue.size(); // 单数行 if (odd) { for (int i=0; i<size; ++i) { // 从队列开头取结点 TreeNode node = queue.pollFirst(); array.add(node.val); // 下一行是从右往左 // 所以左结点先addLast,最终会在队列开头 if (node.left != null) { queue.addLast(node.left); } if (node.right != null) { queue.addLast(node.right); } } } else { // 双数行 for (int i=0; i<size; ++i) { // 从队列末尾取结点 TreeNode node = queue.pollLast(); array.add(node.val); // 下一行是从左往右 // 所以右结点先addFirst,最终会在队列末尾 if (node.right != null) { queue.addFirst(node.right); } if (node.left != null) { queue.addFirst(node.left); } } } result.add(array); // 下一行反过来 odd = !odd; } return result; }