题解 | 求二叉树的层序遍历

求二叉树的层序遍历

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

/**
 * struct TreeNode {
 *  int val;
 *  struct TreeNode *left;
 *  struct TreeNode *right;
 *  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */

#include <vector>
class Solution {
  private:
    struct NodeLevel {
        TreeNode* ptr;
        int level;
        NodeLevel(TreeNode* ptr, int level): ptr(ptr), level(level) {}
    };
    queue<NodeLevel> que;
    vector<vector<int> > res;
  public:
    void visit(queue<NodeLevel>& node_que) {
        vector<NodeLevel> aans;
        int last_level = node_que.front().level;
        while (!node_que.empty()) {
            NodeLevel nodel = node_que.front();
            node_que.pop();
            if (nodel.ptr != nullptr) {
                aans.push_back(nodel);
                que.push(NodeLevel(nodel.ptr->left, nodel.level + 1));
                que.push({nodel.ptr->right, nodel.level + 1});
            }
        }
        int i = aans[0].level;
        vector<vector<int> > rs;
        for (auto nl : aans) {
            if (i == nl.level && i!=0) {
                rs[rs.size() - 1].push_back(nl.ptr->val);
            } else {
                vector<int> n;
                n.push_back(nl.ptr->val);
                rs.push_back(n);
                i = nl.level;
            }
        }
        res = rs;
    }
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > levelOrder(TreeNode* root) {
        if(root==nullptr)return vector<vector<int>>();
        // write code here
        this->que.push(NodeLevel(root, 0));
        visit(this->que);
        return res;
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务