2017-07-13 97 views
0

我正試圖在二叉樹中找到最小值。對於這一點,我使用的是遞歸方法如下所示:在執行遞歸時返回作爲參數傳遞給函數的值

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

一般來說,最好保持界面儘可能簡單。 您的min值在調用程序中的處理非常簡單。

在這種情況下,使用第二種解決方案,但稍微提前編碼。 (。:不揍內建有自己的函數名嘗試重命名你的tree_min或一些這樣的註釋)

return min (res, lres, rres) 
的最後幾行可以用一個簡單的使用任何方便的內置 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 
相關問題