2016-11-19 11 views
0

ノードのrigntサブツリーで最小の番号を見つけたいと思っていますが、このコードは解決策だと思っていましたが、正しく機能していません。このコードで何が問題になっていますか?右のサブツリーで最小の番号を見つける方法

int small; // Where the smallest value is stored 

int smallest(Node n) 
{ 
    if(n.info < small && aux != 0) small = n.info; 
    if(aux == 0) 
    { 
     aux = 1; 
     small = n.dir.info; 
     if(n!=NULL && n.dir!=NULL) return smallest(n.dir); 
    } 
    else{ 
     if(n.dir != NULL) return smallest(n.dir); 
     if(n.esq != NULL) return smallest(n.esq); 
    } 
    return small; 
} 
+0

「小」とは何が宣言されていますか? – templatetypedef

+0

私は普通の木の中で最小のものを見つけるのと同じだが、その関数にルートを渡すのではなく、正しいサブツリーを渡すと言っているだろう... – Copperfield

答えて

1

私はちょうど最も小さい(n.right)関数を呼び出し、左部分木ポインタのための右部分木ポインタとn.leftため

をn.rightを使用しています。 smallestは、バイナリツリー内で最小の値を見つける関数です。

int smallest(Node n){ 
    if(n==NULL) return INF; // replace INF with the maximum value that int can hold in your system like 2147483647 
    int left_small = smallest(n.left); // smallest value in left subtree 
    int right_small = smallest(n.right); // smallest value in right subtree 
    int ans = n.info; 
    if(left_small < ans) ans = left_small; 
    if(right_small < ans) ans = right_small; 
    return ans; 
} 
関連する問題