在执行递归时返回作为参数传递给函数的值

时间:2017-07-13 13:07:35

标签: recursion binary-tree

我试图在二叉树中找到最小值。为此,我使用了一个递归方法,如下所示:

int FindMinBinaryTree(struct TreeNode* root,int min)
{
    if(root!=NULL)
    {
        if(root->data<min)
        {
            min=root->data;
            printf("%d ",root->data);
        }
        min=FindMinBinaryTree(root->left,min);
        min=FindMinBinaryTree(root->right,min);
    }
    return min;
}

这里,我在调用函数时传递了INT_MAX作为参数。这种方法非常有效。但是,在几个文本中,我发现了以下实现以找到最小值:

 int findMin(struct node* root)
{
    // Base case
    if (root == NULL)
      return INT_MAX;

    // Return minimum of 3 values:
    // 1) Root's data 2) Min in Left Subtree
    // 3) Min in right subtree
    int res = root->data;
    int lres = findMin(root->left);
    int rres = findMin(root->right);
    if (lres < res)
      res = lres;
    if (rres < res)
      res = rres;
    return res;
}

我的问题是,在递归中继续返回作为参数传递的值是一种好习惯吗?

1 个答案:

答案 0 :(得分:0)

通常,保持界面尽可能简单是一种更好的做法。 您的min值在调用程序中处理起来非常简单。

在这种情况下,使用第二种解决方案,但稍微提前编码。最后几行可以通过简单使用任何方便的内置min功能进行替换(注意:不要使用自己的功能内置名称。请尝试重命名您的tree_min或一些这样的。)

return min (res, lres, rres)

如果必须手动编码,请使用三元函数:

# return the minimum of current data, left min, and right min.
child_min = (lres < rres) ? lres : rres
return (res < child_min) ? res : child_min