bst中的第k个最小数字

时间:2016-12-02 08:50:42

标签: recursion binary-search-tree

我有以下代码来查找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));
    }

这很好,直到它必须打印出前几个叶子节点。但是,之后它没有给出任何其他节点的正确答案。我在这里失踪了什么?

1 个答案:

答案 0 :(得分:0)

BST的顺序遍历以排序的方式打印出BST。在遍历Inorder时推送列表中的元素,然后从头开始返回列表的第k个元素。