Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ]
/**
* 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> > v;
if(root == NULL) return v;
queue<TreeNode*> q;
queue<int> qlevel;
q.push(root);
qlevel.push(1);
vector<int> a;
v.push_back(a);
int l = 1;
vector<int> *p = &v[l-1];
while(!q.empty())
{
TreeNode *node = q.front();
int level = qlevel.front();
if(l < level)
{
vector<int> b;
v.push_back(b);
l++;
p = &v[l-1];
}
p->push_back(node->val);
if(node->left)
{
q.push(node->left);
qlevel.push(level+1);
}
if(node->right)
{
q.push(node->right);
qlevel.push(level+1);
}
q.pop();
qlevel.pop();
}
int n = v.size();
for(int i = 1; i < n; i += 2)
{
reverse(v[i].begin(),v[i].end());
}
return v;
}
};