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] ]
confused what"{1,#,2,3}"means? > read more on how binary tree is serialized on OJ.
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1 / \ 2 3 / 4 \ 5The above binary tree is serialized as"{1,2,3,#,#,4,#,#,5}".题意:Z字形打印二叉树思路:层次遍历二叉树。对于偶数层在进行逆转就行;[cpp] view plain copy
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root)
{
vector<vector<int>> res;
if (root==NULL)
{
return res;
}
queue<TreeNode*> q;
q.push(root);
while (q.size())
{
vector<int> level;
for (int i=0, n=q.size(); i<n; i++)
{
TreeNode* tmp = q.front();
q.pop();
level.push_back(tmp);
if (tmp->left)
{
q.push(tmp->left);
}
if (tmp->right)
{
q.push(tmp->right);
}
}
res.push_back(level);
}
for (int i=0; i<res.size(); i++)
{
if ((i+1)%2==0)
{
reverse(res[i].begin(), res[i].end());
}
}
return res;
}
};