此题采用两个双端队列来实现。
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> out_;
if (nullptr == root)
return out_;
deque<TreeNode *> q1; // 对应偶数层
deque<TreeNode *> q2; // 对应计数层
q1.push_front(root);
vector<int> rows;
while (q1.size() || q2.size()) {
while(q1.size()) {
TreeNode* p = q1.front();
rows.push_back(p->val);
q1.pop_front();
if(nullptr != p->left) q2.push_front(p->left);
if(nullptr != p->right) q2.push_front(p->right);
}
if(rows.size() > 0)
out_.push_back(rows);
rows.clear();
while(q2.size()) {
TreeNode* p = q2.front();
rows.push_back(p->val);
q2.pop_front();
if(nullptr != p->right) q1.push_front(p->right);
if(nullptr != p->left) q1.push_front(p->left);
}
if(rows.size() > 0)
out_.push_back(rows);
rows.clear();
}
return out_;
}