题目大意:按从左到右,然后从右到左层次遍历二叉树
解题思路:用两个栈来保存每层的子节点。
用left2right表示从左到右的栈
right2left表示从右到左的栈。
当left2right 不为空时,顺序弹出left2right 中的元素,并把它的左节点和右节点顺序压入right2left栈中
否则当right2left不为空时,顺序弹出right2left中的元素,并把它的右节点和左节点顺序压入left2right 栈中
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
vector<vector<int> > result;
if(root == NULL) {
return result;
}
stack<TreeNode *> left2right;
stack<TreeNode *> right2left;
left2right.push(root);
while(!left2right.empty() || !right2left.empty()) {
TreeNode *tmp = NULL;
vector<int> vs;
if(!left2right.empty()) {
while(!left2right.empty()) {
tmp = left2right.top();
left2right.pop();
vs.push_back(tmp->val);
if(tmp->left != NULL) {
right2left.push(tmp->left);
}
if(tmp->right != NULL) {
right2left.push(tmp->right);
}
}
} else {
while(!right2left.empty()) {
tmp = right2left.top();
right2left.pop();
vs.push_back(tmp->val);
if(tmp->right != NULL) {
left2right.push(tmp->right);
}
if(tmp->left != NULL) {
left2right.push(tmp->left);
}
}
}
result.push_back(vs);
}
return result;
}
};