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] ]
vector<vector<int> > zigzagLevelOrder(TreeNode *root)
{
vector<vector<int > > result;
if(root == NULL)
{
return result;
}
vector<int> temp;
bool flag = true;
deque<TreeNode* > myDeque;
myDeque.push_back(root);
myDeque.push_back(NULL);
while(!myDeque.empty())
{
TreeNode* tempNode = myDeque.front();
myDeque.pop_front();
if(tempNode)
{
temp.push_back(tempNode->val);
if(tempNode->left)
{
myDeque.push_back(tempNode->left);
}
if(tempNode->right)
{
myDeque.push_back(tempNode->right);
}
}
else
{
if(!myDeque.empty())
{
myDeque.push_back(NULL);
}
if(flag)
{
result.push_back(temp);
flag = false;
}
else
{
int start = 0;
int end = (int)temp.size() - 1;
while(start < end)
{
swap(temp[start++], temp[end--]);
}
result.push_back(temp);
flag = true;
}
temp.clear();
}
}
return result;
}