1
BST에서 가장 큰 값인 n
을 인쇄하려고합니다. 포인터에 문제가 있습니다. 코드의 일부입니다.BST에서 n 개의 값을 인쇄하십시오.
void bt_printN(node *leaf,int *n)
{
if((leaf != NULL) && *n > 0)
{
bt_printN(leaf->right,n);
printf("%s %d\n",leaf->word, leaf->i);
*n--;
bt_printN(leaf->left,n);
}
}
그리고이 작동하지 않습니다, 같은 재귀 함수에 n
값을 전달하는 적절한 방법은 무엇입니까?
전달하는 것이 좋습니다. 그것은 감소하지 않습니다. '* n -'는 포인터가 값을 가리키는 것이 아니라 포인터를 감소시킨다; 값을 감소 시키려면'(* n) -'이 필요합니다. 다른 모든 것이 OK인지 여부는 별도의 토론입니다. 그것은 N 가장 작은 값을 인쇄 할 가능성이 더 커 보인다 - 지적 된 것처럼 RHS를 먼저하고 있으므로 ... 결국 괜찮을 수도 있습니다. –
Coudl 답변으로 게시하므로 받아 들일 것입니다 – whd
@WhozCraig : 예, 가장 큰 값으로 먼저 작동합니다. 'n '값이 호출을 통해 줄어들었기 때문에 코드가 현재 노드를 출력하기 전에'leaf-> right'에서 재귀 호출 후에'* n> 0'을 검사해야한다고 생각합니다. –