思路:用两个stack来隔层存储节点。
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
if(!root) return {};
vector<vector<int> > ans;
stack<TreeNode*> s1;
stack<TreeNode*> s2;
s1.push(root);
vector<int> tmp;
while(!s1.empty()||!s2.empty())
{
while(!s1.empty())
{
TreeNode *t=s1.top();s1.pop();
tmp.push_back(t->val);
if(t->left) s2.push(t->left);
if(t->right) s2.push(t->right);
}
if(!tmp.empty()) ans.push_back(tmp);
tmp.clear();
while(!s2.empty())
{
TreeNode *t=s2.top();s2.pop();
tmp.push_back(t->val);
if(t->right) s1.push(t->right);
if(t->left) s1.push(t->left);
}
if(!tmp.empty()) ans.push_back(tmp);
tmp.clear();
}
return ans;
}
};