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) {
// use two stacks to zigzag level order traversal
vector<vector<int> > zigzags;
if(root==NULL)
return zigzags;
stack<TreeNode*> st1, st2;
st1.push(root);
while(1)
{
vector<int> zig; // from left to right level order traversal
while(st1.size()>0)
{
TreeNode* root = st1.top();
st1.pop();
zig.push_back( root->val );
if(root->left)
st2.push( root->left );
if(root->right)
st2.push( root->right );
}
if(zig.size()>0)
zigzags.push_back( zig);
else
break;
vector<int> zag; // from right to left level order traversal
while(st2.size()>0)
{
TreeNode* root = st2.top();
st2.pop();
zag.push_back( root->val );
if(root->right)
st1.push( root->right );
if(root->left)
st1.push( root->left );
}
if(zag.size()>0)
zigzags.push_back( zag);
else
break;
}
return zigzags;
}