题解 | #printf的返回值#

求二叉树的层序遍历

http://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3

/**
 * struct TreeNode {
 *    int val;
 *    struct TreeNode *left;
 *    struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型vector<vector<>>
     */
//     vector<vector<int> > levelOrder(TreeNode* root) {
//         vector<vector<int>> s={};  //初始为空  
//         queue<TreeNode *> t;  //模拟队列
//         int front=-1,rear=-1;   //追踪层数
//         int last=0;   //一直等于最右边结点的位置
//         if(root == NULL)
//             return s;
//         else
//         {
//             vector<int> x{};
//             t.push(root);
//             rear++;    
//             while(front < rear)
//             {
//                 root=t.front(); //两条语句,出队列结点到root中
//                 t.pop();  //出队列
//                 front++;
//                 //emplace_bace方法代替push_back方法,减少拷贝创建类
//                 x.emplace_back(root->val);  //将结点数据保存在相应层次的vecto中
//                 if(root->left)
//                 {
//                     t.push(root->left);
//                     rear++;
//                 }
//                 if(root->right)
//                 {
//                     t.push(root->right);
//                     rear++;
//                 }
//                 if(front == last)  //访问到每层的最右边节点了,代表层增加了
//                 {
//                     s.emplace_back(x); //保存每层的结点值
//                     x.clear();   //清空x
//                     last=rear;
//                 }
//             }
//             return s;
//         }
//     }
    vector<vector<int> > levelOrder(TreeNode* root) {
        // write code here
        queue<TreeNode*> que;
        vector<vector<int>> res;
        if(root != nullptr) que.push(root);
        while(!que.empty()){
            int size = que.size();
            vector<int> tmp;
            for(int i = 0; i < size; i++){  //把每层的访问完
                TreeNode* node = que.front();
                que.pop();
                tmp.emplace_back(node->val);  //追加到末尾
                if(node->left) que.push(node->left);
                if(node->right) que.push(node->right);
            }
            res.emplace_back(tmp);
        }
        return res;
          
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务