C++ 二叉树层序遍历代码分析与优化
C++ 二叉树层序遍历代码分析与优化
以下代码实现二叉树的层序遍历:
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;
deque<TreeNode*> q;
int deep=0;
if(root) q.push_back(root);
while(!q.empty()){
for(int i=0;i<q.size();i++){
ans[deep].emplace_back(q[i]->val);
}
TreeNode* p=q.front();
q.pop_front();
if(p->left) q.push_back(p->left);
if(p->right) q.push_back(p->right);
deep++;
}
return ans;
}
};
代码中的问题:
代码中的问题是没有为每一层的vectorans.emplace_back(vector<int>())。
优化后的代码:
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;
deque<TreeNode*> q;
int deep=0;
if(root) q.push_back(root);
while(!q.empty()){
ans.emplace_back(vector<int>()); // 为每一层分配空间
for(int i=0;i<q.size();i++){
ans[deep].emplace_back(q[i]->val);
}
TreeNode* p=q.front();
q.pop_front();
if(p->left) q.push_back(p->left);
if(p->right) q.push_back(p->right);
deep++;
}
return ans;
}
};
优化原理:
在优化后的代码中,我们在while循环开始处使用ans.emplace_back(vector<int>())为每一层分配一个空的vector
通过以上分析和优化,我们修正了代码中的错误,并确保代码能够正确实现二叉树的层序遍历功能。
原文地址: https://www.cveoy.top/t/topic/ovye 著作权归作者所有。请勿转载和采集!