vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
// Note: The Solution object is instantiated only once and is reused by each test case.
vector<vector<int>> res;
if(!root)
return res;
int cnt=1;
int tmp;
vector<int> levelres;
bool bForward = true;
queue<TreeNode*> q;
q.push(root);
while(!q.empty())
{
tmp = 0;
levelres.clear();
for(int i=0;i<cnt;i++)
{
TreeNode* n = q.front();
q.pop();
levelres.push_back(n->val);
if(n->left)
{
q.push(n->left);
++tmp;
}
if(n->right)
{
q.push(n->right);
++tmp;
}
}
if(bForward)
res.push_back(levelres);
else
res.push_back(vector<int>(levelres.rbegin(),levelres.rend()));
bForward = !bForward;
cnt = tmp;
}
return res;
}