C++
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型vector<vector<>>
*/
vector<vector<int> > zigzagLevelOrder(TreeNode* root) {
// write code here
vector<vector<int>> res;
if(!root) return res;
queue<TreeNode*> q;
q.push(root);
int count = 1;
while(!q.empty()){
deque<int> dq;
int size = q.size();
for(int i = 0; i < size; i++){
auto node = q.front();
q.pop();
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
if(count % 2 == 1){
dq.push_back(node->val);
}else{
dq.push_front(node->val);
}
}
count++;
res.push_back({dq.begin(), dq.end()});
}
return res;
}
};
python
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def Print(self, pRoot):
# write code here
if pRoot == None:
return []
ls = [pRoot]
num = 1
res = []
while ls:
tmp = []
if num % 2 == 1:
for i in range(len(ls)):
root = ls.pop(0)
tmp.append(root.val)
if root.left:
ls.append(root.left)
if root.right:
ls.append(root.right)
res.append(tmp)
num += 1
elif num % 2 == 0:
for i in range(len(ls)):
root = ls.pop()
tmp.append(root.val)
if root.right:
ls.insert(0, root.right)
if root.left:
ls.insert(0, root.left)
res.append(tmp)
num += 1
return res