这个请参照level order traversal 不同的就是需要看每次从左还是右输出,维持一个bool 每一层取反就行,然后根据这个bool判断是用add(e) 还是add(0,e)
public class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
Queue<TreeNode> que = new LinkedList<TreeNode>();
List<List<Integer>> ans = new ArrayList<List<Integer>>();
if ( root == null)
return ans;
que.offer(root);
boolean left = true;
while( !que.isEmpty()){
int num = que.size();
List<Integer> list = new ArrayList<Integer>();
for ( int i = 0; i < num; i++ ){
if (que.peek().left != null)
que.offer(que.peek().left);
if( que.peek().right != null)
que.offer(que.peek().right);
if ( left ){
list.add(que.poll().val);
}
else
list.add(0, que.poll().val);
}
left = !left;
ans.add(list);
}
return ans;
}
}