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