/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ class Solution { public: /** * * @param root TreeNode类 * @return int整型vector<vector<>> */ // 百度 l4 定位算法 一面 手撕 当时5分钟内没写出来 但有思路 // 方法二 使用递归的方式 void dfs(TreeNode* root, vector<vector<int>>& ret, int level) { if(root==nullptr) { return ; } else { if(ret.size()<level)// 新一层 { ret.push_back(vector<int>{}); // 先开辟这一层子数组 只有在访问左节点时才会新建 } ret[level-1].push_back(root->val); // 存入当前值 这里保证了即使是深度优先遍历 但仍存在对应子数组内! } // 递归 遍历下一层 dfs(root->left, ret, level+1); dfs(root->right, ret, level+1); } vector<vector<int> > levelOrder(TreeNode* root) { // write code here vector<vector<int>> ret; if (root == nullptr) { return ret; } dfs(root, ret, 1); // 从1开始 return ret; } };
用递归 来做 感觉别扭
本身遍历顺序是dfs 但通过level 来告诉 进入哪个子数组