Java:
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
if (root == null) return ans;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
boolean flag = true;
while(!queue.isEmpty()){
List<Integer> list = new ArrayList<>();
int len = queue.size();
for (int i=0;i<len;i++){
TreeNode t = queue.poll();//删除并返回第一个元素
if(flag) list.add(t.val);
else list.add(0,t.val);
if (t.left!=null) queue.add(t.left);
if (t.right!=null) queue.add(t.right);
}
ans.add(list);
flag = !flag;
}
return ans;
}
}
Python:
class Solution:
def zigzagLevelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root:
return []
ans, lis, stack, flag = [], [], [root], 1
while stack:
for i in range(len(stack)):
t = stack.pop(0)
lis+= [t.val]
if t.left:
stack+= [t.left]
if t.right:
stack+= [t.right]
ans+= [lis[::flag]]
flag*= -1
lis = []
return ans