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
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> > result;
if(!root)
return result;
stack<TreeNode *> q1;
stack<TreeNode *> q2;
q1.push(root);
while(q1.size() > 0 || q2.size() > 0)
{
vector<int> v1;
while(q1.size() > 0)
{
TreeNode *top = q1.top();
q1.pop();
v1.push_back(top->val);
if(top->left)
q2.push(top->left);
if(top->right)
q2.push(top->right);
}
if(v1.size() > 0)
{
result.push_back(v1);
}
vector<int> v2;
while(q2.size() > 0)
{
TreeNode *top = q2.top();
q2.pop();
v2.push_back(top->val);
if(top->right)
q1.push(top->right);
if(top->left)
q1.push(top->left);
}
if(v2.size() > 0)
{
result.push_back(v2);}
}
}
};
No comments:
Post a Comment