树的BFS的简单变种。
public class Solution { public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) { ArrayList<ArrayList<Integer>> ans = new ArrayList<ArrayList<Integer>>(); if (root == null) return ans; Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); int lastLevel = 1; int thisLevel = 0; boolean direction = true; ArrayList<Integer> row = new ArrayList<Integer>(); while (queue.size() != 0) { TreeNode n = queue.poll(); lastLevel--; if (n.left != null) { queue.offer(n.left); thisLevel++; } if (n.right != null) { queue.offer(n.right); thisLevel++; } row.add(n.val); if (lastLevel == 0) { lastLevel = thisLevel; thisLevel = 0; if (!direction) { // reverse int len = row.size(); for (int i = 0; i < len/2; i++) { int tmp = row.get(i); row.set(i, row.get(len-1-i)); row.set(len-1-i, tmp); } } direction = !direction; ans.add(row); row = new ArrayList<Integer>(); } } return ans; } }