题目描述:
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] ]
思路分析:层序遍历二叉树。设置一个标志变量r来表示当前层是奇数层还是偶数层。当处于偶数数层时,将当前层得到的序列反转后再插入到层序遍历的序列中,奇数层则直接插入。层序遍历结束后即得到结果。
代码:
vector<vector<int> > Solution::zigzagLevelOrder(TreeNode *root)
{
vector<vector<int> > result;
vector<int> sequence;
bool r = false;
TreeNode * flag = new TreeNode(0);
queue<TreeNode *> treenode_queue;
if(root == NULL)
return result;
treenode_queue.push(root);
treenode_queue.push(flag);
while(treenode_queue.size() >= 1)
{
TreeNode * node = treenode_queue.front();
treenode_queue.pop();
if(node == flag)
{
if(r)
{
reverse(sequence.begin(),sequence.end());
}
r = !r;
result.push_back(sequence);
sequence.clear();
if(treenode_queue.empty())
break;
treenode_queue.push(flag);
}
else
{
sequence.push_back(node->val);
if(node->left != NULL)
treenode_queue.push(node->left);
if(node->right != NULL)
treenode_queue.push(node->right);
}
}
return result;
}