思路:和前面一题的层次遍历有点区别,这里需要用一个栈结构来保存每一层的节点,因为下一层遍历始于当前层的最后一个节点,而且奇数层是从左至右开始遍历,偶数层是从右向左遍历。
code:
class Solution {
public:
vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
vector<vector<int> > ret;
if(root){
stack<TreeNode *> preQ, nextQ;
TreeNode * p = root;
int flag = 0;
preQ.push(p);
while(!preQ.empty()){
vector<int> temp;
if(flag == 0){
while(!preQ.empty()){
TreeNode *t = preQ.top();
temp.push_back(t->val);
if(t->left != NULL)
nextQ.push(t->left);
if(t->right != NULL)
nextQ.push(t->right);
preQ.pop();
}
flag = 1;
}
else{
while(!preQ.empty()){
TreeNode *t = preQ.top();
temp.push_back(t->val);
if(t->right != NULL)
nextQ.push(t->right);
if(t->left != NULL)
nextQ.push(t->left);
preQ.pop();
}
flag = 0;
}
ret.push_back(temp);
preQ = nextQ;
while(!nextQ.empty())
nextQ.pop();
}
}
return ret;
}
};