我试图在二叉树中找到最小值。为此,我使用了一个递归方法,如下所示:
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;
}
我的问题是,在递归中继续返回作为参数传递的值是一种好习惯吗?
答案 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