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

Recursion 在执行递归时返回作为参数传递给函数的值,recursion,binary-tree,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=Fi

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

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-FindMinBinaryTree(结构树节点*root,int-min)
{
if(root!=NULL)
{
如果(根->数据数据);
printf(“%d”,根->数据);
}
最小值=FindMinBinaryTree(根->左,最小值);
min=FindMinBinaryTree(根->右,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;
}
int findMin(结构节点*根)
{
//基本情况
if(root==NULL)
返回INT_MAX;
//返回至少3个值:
//1)根的数据2)左子树中的最小值
//3)右子树中的最小值
int res=根->数据;
int lres=findMin(根->左);
int rres=findMin(根->右);
如果(lres

我的问题是,在递归中保持返回作为参数传递的值是一种好的做法吗?

一般来说,保持接口尽可能简单是更好的做法。 您的
min
值在调用程序中同样容易处理

在这种情况下,使用第二种解决方案,但将编码稍微提前一点。最后几行可以简单地使用任何方便的内置
min
函数来替换(注意:不要用自己的函数来替换内置名称。请尝试重命名您的
tree\u min
或类似的函数。)

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

# return the minimum of current data, left min, and right min.
child_min = (lres < rres) ? lres : rres
return (res < child_min) ? res : child_min
#返回当前数据的最小值,左最小值和右最小值。
child_min=(lres
# return the minimum of current data, left min, and right min.
child_min = (lres < rres) ? lres : rres
return (res < child_min) ? res : child_min