2016-12-02 7 views
0

私は、bstのk番目に小さい番号を見つけるための次のコードを持っています。bstのk番目の最小番号

int kthsmallest(node* root, int* currentpos, int k){ 

    if(root->left != NULL){ 
      return kthsmallest(root->left, currentpos, k); 
    } 

    (*currentpos)++; 
    if(*currentpos == k){ 
      return root->n; 
    } 

    if(root->right != NULL){ 
      return kthsmallest(root->right, currentpos, k); 
    } 

} 

発信者(私はBSTに10個の数字を持っていると仮定すると):

int temp=0; 
    for(i=1; i<10; i++){ 
      temp=0; 
      printf("%d ", kthsmallest(root, &temp, i)); 
    } 

それは最初のいくつかのリーフノードをプリントアウトして持ってまで、これが正常に動作します。しかし、それ以降は、他のノードに対して正解を返すことはありません。私はここで何が欠けていますか?

答えて

0

BSTの順方向走査はソートされた方法でBSTを出力します。 Inorderをトラバースするときにリストの要素を押してから、最初からリストのk番目の要素を返します。

+0

リストでそれらを押すのではなく、カウントを保持し、カウントがkに達すると、要素を返します。それは上記のコードの仮定されたロジックですが、何かが壊れて動作しないためです。 – Karan

関連する問題