class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
if(pRoot == NULL) return {}; //为空返回空
int index = 0; //记录是奇数层还是偶数层
stack<int> sta; //栈用作奇数行反向输出val
queue<TreeNode* > deq; //队列用作模拟层次遍历(BFS),原来用的是双端队列,改成队列了
vector<int> temp; //存储小的vector
vector<vector<int> > res; //存结果
TreeNode* p = pRoot;
deq.push(p); //根节点入双端队列
while(deq.size() != 0){ //队列为空说明遍历完成
if(index % 2 == 0){ //偶数层正常执行层次遍历
int x = deq.size();
while(x--){
temp.push_back(deq.front()->val);
if(deq.front()->left != NULL) deq.push(deq.front()->left);
if(deq.front()->right != NULL) deq.push(deq.front()->right);
deq.pop();
}
index++;
res.push_back(temp);
temp.clear();
continue;
}
if(index % 2 == 1){ //奇数层进栈实现反向输出
int x = deq.size();
while(x--){
if(deq.front()->left != NULL) deq.push(deq.front()->left);
if(deq.front()->right != NULL) deq.push(deq.front()->right);
sta.push(deq.front()->val);
deq.pop();
}
while(sta.size() != 0){
temp.push_back(sta.top());
sta.pop();
}
index++;
res.push_back(temp);
temp.clear();
continue;
}
}
return res;
}
};