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; } };