2016-12-02 2 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