解法:
1、引入两个栈,stk1,stk2.
2、初始状态:将3压入stk1中
3、不断弹出stk1的结点,并将其子节点压入stk2中,并收集弹出来的结点。很明显,stk1和stk2存放的是不同层的结点
4、弹出stk2的结点,并将其子节点压入stk1中,并收集弹出来的结点
5、不断循环3、4步,直到栈空为止
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
stack<TreeNode*> stk1,stk2;
stk1.push(root);
vector<vector<int>> res;
if (root==nullptr) return res;
int step = 1;
while(!stk1.empty() || !stk2.empty()){
if (step==1) {
vector<int> s1;
while(!stk1.empty()){
TreeNode* p = stk1.top();
stk1.pop();
if(p->left!=nullptr) stk2.push(p->left);
if(p->right!=nullptr) stk2.push(p->right);
s1.push_back(p->val);
}
res.push_back(s1);
step = 2;
}
else{
vector<int> s2;
while(!stk2.empty()){
TreeNode* p = stk2.top();
stk2.pop();
if(p->right!=nullptr) stk1.push(p->right);
if(p->left!=nullptr) stk1.push(p->left);
s2.push_back(p->val);
}
res.push_back(s2);
step = 1;
}
}
return res;
}
};