/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> res;
if(root==nullptr)
return res;
deque<TreeNode*> q;
q.push_back(root);
bool is_reverse = true; //是否从队头出元素
while(!q.empty())
{
int len = q.size(); // 这一层有多少个元素,不可以直接用q.size(),因为后续会给q里加元素
vector<int> tmp;
for(int i=0;i<len;++i) //按正常顺序加入队列
{
TreeNode *elem = q.front();
tmp.push_back(elem->val);
q.pop_front();
if(elem->right)
q.push_back(elem->right);
if(elem->left)
q.push_back(elem->left);
}
if(is_reverse) //将元素反序
{
vector<int> tmp2(tmp.rbegin(),tmp.rend());
res.push_back(tmp2);
}
else
res.push_back(tmp);
is_reverse = !is_reverse;
}
return res;
}
};
参考:
https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/discuss/33825/c%2B%2B-5ms-version%3A-one-queue-and-without-reverse-operation-by-using-size-of-each-level
在参考中,代码是在存元素阶段直接进行反序存储的,比上述所需代价更小