技巧:用两个栈实现不同层之间的遍历
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null)
return res;
Stack<TreeNode> stack1 = new Stack<>();
Stack<TreeNode> stack2 = new Stack<>();
stack1.push(root);
while (!stack1.empty() || !stack2.empty()) {
List<Integer> out = new ArrayList<>();
while (!stack1.empty()) {
TreeNode cur = stack1.pop();
out.add(cur.val);
if (cur.left != null)
stack2.push(cur.left);
if (cur.right != null)
stack2.push(cur.right);
}
if (!out.isEmpty())
res.add(out);
List<Integer> in = new ArrayList<>();
while (!stack2.empty()) {
TreeNode cur = stack2.pop();
in.add(cur.val);
if (cur.right != null)
stack1.push(cur.right);
if (cur.left != null)
stack1.push(cur.left);
}
if (!in.isEmpty())
res.add(in);
}
return res;
}