我困惑的一点是如何确定树的深度,一层层返回。看了代码后豁然开朗,好一个 int size = q.size(); 从根节点开始搜索,每次遍历同一层的全部节点,使用一个列表存储该层的节点值。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> q;
vector<vector<int>> res;
if (!root) return res;
q.push(root);
while (!q.empty()) {
int size = q.size();
vector<int> tmp;
for (int i = 0; i < size; i ++) {
TreeNode *node = q.front();
q.pop();
tmp.push_back(node->val);
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
res.push_back(tmp);
}
return res;
}
};
递归方式
void order(TreeNode *node, vector<vector<int>>& res, int depth) {
if (node == nullptr) return;
// 增加 res 的行数
if (res.size() == depth) res.push_back(vector<int>());
res[depth].push_back(node->val);
order(node->left, res, depth + 1);
order(node->right, res, depth + 1);
}
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
int depth = 0;
order(root, res, depth);
return res;
}