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