我有以下代码来查找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 :(得分:0)
BST的顺序遍历以排序的方式打印出BST。在遍历Inorder时推送列表中的元素,然后从头开始返回列表的第k个元素。