题目大意:给出一个二叉树,按照锯齿形层序遍历二叉树。最后将结果缓存在二维向量中。
算法思想:
1.整体思想如LeetCode---Binary Tree Level Order Traversal
2.只需将基数层号的缓冲向量逆序即可。
代码如下:
/**
* Definition for a binary tree node.
* 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>> res;
vector<int> ro;
queue<pair<TreeNode*,int>> Q;
if(root==NULL) return res;
int level=0;
Q.push(make_pair(root,0));
while(!Q.empty()){
pair<TreeNode*,int> tmp=Q.front();
Q.pop();
if(tmp.second==level)
ro.push_back(tmp.first->val);
else{
if((level%2)==1)
reverse(ro.begin(),ro.end());
res.push_back(ro);
ro.clear();
ro.push_back(tmp.first->val);
level=tmp.second;
}
if(tmp.first->left!=NULL)
Q.push(make_pair(tmp.first->left,tmp.second+1));
if(tmp.first->right!=NULL)
Q.push(make_pair(tmp.first->right,tmp.second+1));
}
if(!ro.empty()){
if(level%2==1)
reverse(ro.begin(),ro.end());
res.push_back(ro);
}
return res;
}
};