题解 | #二叉树的之字形层序遍历# (获取队列长度入队)

二叉树的之字形层序遍历

http://www.nowcoder.com/practice/47e1687126fa461e8a3aff8632aa5559

  1. 用队列实现二叉树层次遍历。
  2. 同时设置一个flag标记, 来判断二叉树该一层节点的值是否翻转。
  3. 用stl中reverse函数翻转vector数组
  4. 使用异或, 实现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>
全部评论

相关推荐

点赞 评论 收藏
分享
11-02 09:49
已编辑
货拉拉_测试(实习员工)
热爱生活的仰泳鲈鱼求你们别卷了:没事楼主,有反转查看图片
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务