剑指 Offer 32 - III. 从上到下打印二叉树 III
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[20,9],
[15,7]
]
使用一个标记记录是奇数层还是偶数层
偶数层正常输出
奇数层使用一个栈暂时存放输出的数据,该层输出完成后再将栈内元素一个个输出
PS:似乎使用双端队列会比较方便
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> Q;
vector<vector<int>> res;
int flag = 0;
if(root) Q.push(root);
while(!Q.empty()){
vector<int> tmp ;
int size = Q.size();
if(flag%2==0){
for(int i=0;i<size;i++){
TreeNode* T = Q.front();
Q.pop();
tmp.push_back(T->val);
if(T->left) Q.push(T->left);
if(T->right) Q.push(T->right);
}
}
else{
stack<int> stk;
for(int i=0;i<size;i++){
TreeNode* T = Q.front();
Q.pop();
stk.push(T->val);
if(T->left) Q.push(T->left);
if(T->right) Q.push(T->right);
}
while(!stk.empty()){
tmp.push_back(stk.top());
stk.pop();
}
}
res.push_back(tmp);
flag++;
}
return res;
}
};