递归中的静态向量vs全局向量



USING GLOBAL VECTOR

vector<int> r;
vector<int> inorderTraversal(TreeNode* root) {
if(root==NULL)
return r;
inorderTraversal(root->left);
r.push_back(root->val);
inorderTraversal(root->right);
return r;
}

我正在得到所有测试用例的答案,但是当使用下面的代码时,我在单独运行时得到答案,但是当我最终提交测试用例失败时(空树的输入),就像我得到其他一些输入的输出为什么会发生这种情况?

vector<int> inorderTraversal(TreeNode* root) {
static vector<int> r;
if(root==NULL)
return r;
inorderTraversal(root->left);
r.push_back(root->val);
inorderTraversal(root->right);
return r;
}

如果您说第一个版本有效,那么我假定您的"全局";变量实际上是类的实例变量。在这种情况下,每次测试套件创建类的新实例时,该变量都是一个新变量。

然而,static局部变量将保持它的值,即使函数是在它作为方法的类的新实例上执行的。

一种解决方法是不使其为static,然后重载该方法,使r作为第二个参数:

vector<int> inorderTraversal(TreeNode* root) {
vector<int> r;
return inorderTraversal(root, r);
}
vector<int> inorderTraversal(TreeNode* root, vector<int> r) {
if(root==NULL)
return r;
inorderTraversal(root->left, r);
r.push_back(root->val);
inorderTraversal(root->right, r);
return r;
}

最新更新