【问题标题】:static vector in recursion vs global vector递归中的静态向量与全局向量
【发布时间】:2021-11-13 21:30:46
【问题描述】:

使用全局向量

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;
}

【问题讨论】:

    标签: recursion static tree global


    【解决方案1】:

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

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-16
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 2019-11-17
      相关资源
      最近更新 更多