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,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]
思路:采用宽度优先搜索(BFS),设置两个栈,交替存储该层的节点。因为是Z字形的输出,除了采用先进先出的栈,还要注意地二个栈在输入时,先是右子树再左子树。
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
stack<TreeNode*> q1,q2;
vector<vector<int>> r;
if(!root)
return r;
q1.push(root);
while(!q1.empty()||!q2.empty())
{
vector<int> r1;
while(!q1.empty())
{
TreeNode* tr=q1.top();
r1.push_back(tr->val);
if(tr->left) q2.push(tr->left);
if(tr->right) q2.push(tr->right);
q1.pop();
}
if(r1.size()!=0)
r.push_back(r1);
r1.clear();
while(!q2.empty())
{
TreeNode* tr=q2.top();
r1.push_back(tr->val);
if(tr->right) q1.push(tr->right);
if(tr->left) q1.push(tr->left);
q2.pop();
}
if(r1.size()!=0)
r.push_back(r1);
r1.clear();
}
return r;
}