class Solution {
//可以不同队列,用一个id指向当前层的第一个node即可,需要同时维护node和val两个列表
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > levelOrder(TreeNode* root) {
        // write code here
        vector<vector<int>> result;
        if(!root) return result;
        vector<int> head_val = {root->val};
        result.push_back(head_val);

        vector<vector<TreeNode*>> one_layer_node;
        vector<TreeNode*> head = {root};
        one_layer_node.push_back(head);



        int layer_id = 0;
        while(layer_id<one_layer_node.size()){

            vector<int> layer_val;
            vector<TreeNode*> layer_node;
            for(int i=0; i<one_layer_node[layer_id].size(); i++){

                if(one_layer_node[layer_id][i]->left){
                    layer_val.push_back(one_layer_node[layer_id][i]->left->val);
                    layer_node.push_back(one_layer_node[layer_id][i]->left);
                }
                if(one_layer_node[layer_id][i]->right){
                    layer_val.push_back(one_layer_node[layer_id][i]->right->val);
                    layer_node.push_back(one_layer_node[layer_id][i]->right);
                }
            }
            if(layer_node.size()>0){
                one_layer_node.push_back(layer_node);
                result.push_back(layer_val);
            }
            layer_id+=1;

        }

        return result;
    }
};