题目
https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/submissions/
就是分组输出的特殊版
迭代
直接迭代过去了,每次判断要不要逆置就行了
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> ans;
if(!root)return ans;
queue<TreeNode*>que;
que.push(root);
bool flag=false;
vector<int>vt;
while(!que.empty()){
vt.clear();
int len=que.size();
while(len){
len--;
TreeNode* t=que.front();
vt.push_back(t->val);
que.pop();
if(t->left)que.push(t->left);
if(t->right)que.push(t->right);
}
if(flag)reverse(vt.begin(),vt.end());
flag=!flag;
ans.push_back(vt);
}
return ans;
}
};
运行结果:
速度更快的迭代
双端队列,不同的入队方式,比起第一种方法,少了一个reverse方法的开销
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> res;
if(root == NULL)
return res;
queue<TreeNode*> q;
q.push(root);
int level = 0;
while(!q.empty()){
int n = q.size();
deque<int> temp; //双端队列
for(int i = 0; i < n; i++){ // 一层
TreeNode* p = q.front();
q.pop();
if(level % 2 == 0)
temp.push_back(p->val); //偶数层在后面加(从零层开始算),即从左往右
else
temp.push_front(p->val); //奇数层在前面加(从零层开始算),即从右往左
if(p->left)
q.push(p->left);
if(p->right)
q.push(p->right);
}
res.push_back(vector<int>(temp.begin(), temp.end())); //添加到结果中
level++;
}
return res;
}
};
作者:hao-xin-qing-5
链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/solution/jian-dan-de-ceng-ci-bian-li-by-hao-xin-qing-5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。