题解 | #二叉树的之字形层序遍历# (获取队列长度入队)
二叉树的之字形层序遍历
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>