这是在完成Leetcode102题:Binary Tree Level Order Traversal时遇到的问题。翻译过来大致意思是引用绑定到了空的指针上。 源代码,采用递归思想:
class Solution{ public: vector<vector<int>> levelOrder(TreeNode* root){ vector<vector<int>> result; int num = 0; traversal(root, result, num); return result; } void traversal(TreeNode* tree, vector<vector<int>>& res, int level) { if(tree == NULL) return; res[level].push_back(tree->val); traversal(tree->left, res, level+1); traversal(tree->right, res, level+1); } };问题原因: 1.未能对res实现扩容。使level增大后res[level]越界。
vector容器具备自动扩容的功能,但是res[level].push_back()只能对res[level]进行扩容,而不能对res进行扩容。当level超过容器容量时,会出现越界提示。
解决方案: 增添代码行:
if (level >= res.size()) res.push_back(vector<int>());使容器在必要的时候进行扩容,避免下标越界。
在完成力扣 剑指offer51时,在类中对临时数组初始化:
class Solution { public: vector<int> tmp(50000, 0);//该句报错 ... }在类中需要优先声明,因此编译器对vector<int> tmp(50000, 0)语句,认为是声明成员函数tmp,返回值类型为vector<int>,函数存在两个参数,但是参数的声明错误。 在类中正确初始化方式:
//1 vector<int> tmp = vector<int>(50000, 0); //2 vector<int> tmp; tmp.reverse(50000); //3 vector<int> tmp{vector<int>(50000, 0)};