思路:层次遍历+双端队列deque
具体思路:只要在
leetcode102.二叉树的层次遍历(中等)
https://blog.csdn.net/zhangjiaji111/article/details/120602711
的基础上加一个双端队列,分别从两边push即可获得从左到右 和 从右向左遍历的值
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> ans;
if (!root) return ans;
queue<TreeNode*> q;
q.push(root);
bool isLeft = true;
while (!q.empty()) {
int len = q.size();
deque<int> dq; //
for (int i = 0; i < len; ++i) {
auto frt = q.front();
q.pop();
if (isLeft) dq.push_back(frt->val); //
else dq.push_front(frt->val);
if (frt->left) q.push(frt->left);
if (frt->right) q.push(frt->right);
}
ans.push_back(vector<int>(dq.begin(), dq.end()));
isLeft = !isLeft;
}
return ans;
}
};
注意的点:deque遍历的顺序和不断调用push_back()的顺序是一致的