这个提跟Binary Tree Level Order Traversal 一样,只是结果集用栈
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> result = new ArrayList<List<Integer>>(); if(root == null){ return result; } List<Integer> first = new ArrayList<Integer>(); first.add(root.val); result.add(first); LinkedList<TreeNode> queue = new LinkedList<TreeNode>(); LinkedList<TreeNode> childrenQueue = new LinkedList<TreeNode>(); queue.add(root); int i =1; while (!queue.isEmpty()) { TreeNode node = queue.remove(); if(node.left!=null){ childrenQueue.add(node.left); } if(node.right!=null){ childrenQueue.add(node.right); } if(queue.isEmpty() && !childrenQueue.isEmpty()){ queue.addAll(childrenQueue); LinkedList<Integer> childrenResult = new LinkedList<Integer>(); boolean flag = i%2==0?true:false; for(TreeNode child : childrenQueue){ if(flag){ childrenResult.add(child.val); }else{ childrenResult.push(child.val); } } result.add(childrenResult); childrenQueue.clear(); i++; } } return result; } }