2017-07-13 4 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の値は、呼び出し元のプログラムと同じように簡単に処理されます。

この場合、2番目のソリューションを使用しますが、コードを少し進めてください。最後の数行は、任意の便利なビルトインmin機能の簡単な使用に置き換えることができます(注:内蔵の独自の機能を持つ名前壊していないあなたにtree_minまたはそのようないくつかの名前を変更してください)

return min (res, lres, rres) 

の場合は、に手動で入力する必要があります。

関連する問題