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

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > ret;
    vector<vector<int> > levelOrder(TreeNode* root) {
        // write code here
        if (root) {
            vector<int> retVec = {root->val};
            ret.emplace_back(retVec);
            vector<const TreeNode *> rootVec = {root};
            deepOrder(rootVec);
        }
        return ret;
    }
    void deepOrder(const vector<const TreeNode *> &nodes) {
        vector<int> retVec;
        vector<const TreeNode *> nextVec;
        for (auto &node : nodes) {
            if (node->left) {
                retVec.emplace_back(node->left->val);
                nextVec.emplace_back(node->left);
            }
            if (node->right) {
                retVec.emplace_back(node->right->val);
                nextVec.emplace_back(node->right);
            }
        }
        if (!retVec.empty()) {
            ret.emplace_back(retVec);
            deepOrder(nextVec);
        }
    }
};