两个栈
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> res;
if(!root) return res;
stack<TreeNode*> st1,st2;
vector<int> vec;
st1.push(root);
TreeNode* cur = nullptr;
while(1){
while(!st1.empty()){
cur = st1.top();
st1.pop();
vec.push_back(cur->val);
if(cur->left) st2.push(cur->left);
if(cur->right) st2.push(cur->right);
}
if(!vec.empty()){
res.push_back(vec);
vec.clear();
}else{
break;
}
while(!st2.empty()){
cur = st2.top();
st2.pop();
vec.push_back(cur->val);
if(cur->right) st1.push(cur->right);
if(cur->left) st1.push(cur->left);
}
if(!vec.empty()){
res.push_back(vec);
vec.clear();
}else{
break;
}
}
return res;
}