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));
}
それは最初のいくつかのリーフノードをプリントアウトして持ってまで、これが正常に動作します。しかし、それ以降は、他のノードに対して正解を返すことはありません。私はここで何が欠けていますか?
リストでそれらを押すのではなく、カウントを保持し、カウントがkに達すると、要素を返します。それは上記のコードの仮定されたロジックですが、何かが壊れて動作しないためです。 – Karan