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(BinTree *root)
{
vector<vector<int> > result;
int curNum=1,nextNum=0,level=0;
if(root == NULL)
return result;
deque<BinTree*> de;
BinTree* temp;
de.push_back(root);
//奇数用栈
while(!de.empty())
{
vector<int> res;
while(curNum >0)
{
temp = de.front();
de.pop_front();
if(temp->left !=NULL)
{
de.push_back(temp->left);
nextNum++;
}
if(temp->right != NULL)
{
de.push_back(temp->right);
nextNum++;
}
res.push_back(temp->value);
curNum--;
}
curNum = nextNum;
nextNum =0;
if(level%2)
reverse(res.begin(),res.end());
result.push_back(res);
level++;
}
return result;
}
总结:
如果只是为了输出结果,使用双栈法也可以,一个栈存放偶数层,一个栈存放奇数层,偶数层和奇数层的区别就是压栈时的顺序不同,一个是先做后右,一个是先右后左,淡然也可以使用向量临时存储