2017-11-10 7 views
0

BST의 데이터 인 inorder를 인쇄하려고합니다. 이것은 간단한 재귀와 함께 작동하지만, 함수가 호출 코드로 돌아 오기 전에 인쇄 된 데이터의 끝에 개행을 인쇄하는 방법을 알 수 없습니다.인라인 트리 탐색을위한 데이터를 한 줄에 공백으로 구분하고 줄 바꿈으로 끝내십시오.

void printTreeHelper(struct TreeNode* root) 
{ 
    if(root) 
    { 
    printTreeHelper(root->left); 
    printf("%d ", root->data); 
    printTreeHelper(root->right); 
    } 
} 

void printTree(struct TreeNode *root) 
{ 
    printTreeHelper(root); 
    printf("\n"); 
} 
+0

그냥'의 printf ("\ n")를 추가 int 다음을 수행 할 수 있습니다 printTree() 반환 함수, 말? [mcve]가 필요합니다 – Stargateur

+1

'printTree()'를 호출 한 직후에'printf ("\ n");'명령문을 추가 할 수 있습니다. –

+0

전체 정보를 제공해주십시오. 또한 기본 사례 문을 추가 할 수 있습니다. 모든 리프 노드 다음에 줄 바꿈을 인쇄하십시오. (이것이 당신이하고있는 것이라면) – Neha

답변

1

당신은 개행 문자를 인쇄 할 도우미 기능을 사용할 수 있습니다.

또 다른 간단한 방법은 두 가지 기능을 갖는 것입니다. 새로운 기능이 당신이 처음으로 부르는 기능입니다. 그런 다음 새 함수 내부에서 구현 한 함수를 호출하십시오. 그 후에 개행을 인쇄하십시오.

무엇인가 :

#define PRINT_NEWLINE_AFTER_CALL(x) x,printf("\n") 

과 같이 사용 :

void TreePrinter(){ 
    PrintTree() 
    print the newline 
} 
+0

이것이 효과가 있습니다! 감사! –

0

가장 간단한 방법은 그냥 함수를 호출 한 후 개행 문자를 인쇄 할 수 있습니다 : 모든 재귀 호출 완료 후

/* Print data for inorder tree traversal on single line, 
* separated with spaces, ending with newline. */ 

void printTree(struct TreeNode* root) 
{ 
    if(root) 
    { 
    printTree(root->left); 
    printf("%d ", root->data); 
    printTree(root->right); 
    } 
} 
+0

위 참조, 감사합니다! –

-1

당신은 다음과 같이 매크로를 기록 할 수

PRINT_NEWLINE_AFTER_CALL(printTree(root)); 

함수가 값을 반환하는 경우, 이 매크로를 사용하면 해당 반환 값을받을 수도 있습니다. 마지막에`;

int retval = PRINT_NEWLINE_AFTER_CALL(printTree(root)); 
+0

Downvoter : 설명해 주겠다고하는 이유는 무엇입니까? –

+0

문제가있어서 좋지 않습니다. 'if (y) PRINT_NEWLINE_AFTER_CALL (printTree (root));'가 작동하지 않습니다. * 멀티 라인 매크로를 사용해야한다면 * do ... while (0)'루프에 매크로를 두는 것을 고려해보십시오. https://stackoverflow.com/questions/923822/whats-the-use-of-do-while0-when-we-define-a-macro – MFisherKDX

+0

@MFisherKDX : do {..} while 매크로는 함수 호출로 확장되어야하고'do {..} while (0) '에 포함되면 함수의 반환 값을받을 수 없으므로 (0) 내가 물었던 질문에서,'printTree()'의 리턴 타입은'void'이지만 매크로를 일반화 된 방식으로 작성하여 어떤 값을 반환하는 재귀 함수와 함께 사용할 수 있도록했습니다. 나는 정정했다, 당신이 그것을 좋아하기를 바란다. –