在递归中使用实例变量与函数参数

时间:2017-05-23 17:33:25

标签: performance recursion binary-search-tree

在递归过程中使用实例变量与函数调用传递参数之间是否存在效率差异?例如,我最近在Leetcode上遇到问题:

  

给定二进制搜索树(BST),将其转换为更大树,以便原始BST的每个键都更改为原始键加上所有键的总和大于BST中的原始键。

我的解决方案和迄今为止最受欢迎的解决方案如下:根据Leetcode 46 ms

class Solution {
public:
    int sum = 0;

    TreeNode* convertBST(TreeNode* root) {
        if (root == NULL) return 0;
        convertBST(root->right);
        sum += root->val;
        root->val = sum;
        convertBST(root->left);
        return root;
    }
};

但为什么我们也不能使用以下解决方案,或者它是否重要?根据Leetcode

59 ms运行时间
class Solution {
public:
    TreeNode* convertBST(TreeNode* root, int* sum) {
        if (root == NULL) return NULL;
        convertBST(root->right, sum);
        *sum += root->val;
        root->val = *sum;
        convertBST(root->left, sum);
        return root;
    }

    TreeNode* convertBST(TreeNode* root) {
        int sum = 0;
        return convertBST(root, & sum);
    }
};

由于

0 个答案:

没有答案