题解 | #二叉树的之字形层序遍历# (获取队列长度入队)
二叉树的之字形层序遍历
http://www.nowcoder.com/practice/47e1687126fa461e8a3aff8632aa5559
- 用队列实现二叉树层次遍历。
- 同时设置一个flag标记, 来判断二叉树该一层节点的值是否翻转。
- 用stl中reverse函数翻转vector数组
- 使用异或, 实现flag一次是0,一次是1,来回变化。
```
class Solution {
public:
vector<vector<int> > zigzagLevelOrder(TreeNode* root) { vector<vector<int> > ans;
if(!root) return ans;
queue<treenode*> q;
q.push(root);
int flag = 0; // 初始化为0,第一层不翻转
while(!q.empty()){
int size = q.size();
vector<int> tmp;
while(size--){
TreeNode *r = q.front();
q.pop();
tmp.push_back(r->val);
if(r->left) q.push(r->left);
if(r->right) q.push(r->right);
}
if(flag) reverse(tmp.begin(), tmp.end());
ans.push_back(tmp);
flag = flag^1; // 使flag 0,1变化。
}
return ans;
}
};
```</int></treenode*></vector<int></vector</int>