2016-11-25 1 views
-2

초보자입니다. 수준별로 avl 트리 수준을 인쇄하려고하고 오른쪽에서 왼쪽으로합니다. 그러나 왼쪽에서 오른쪽으로 결과. 내 문제를 해결할 수 있기를 바랍니다. 여기 내 소스 코드의 일부는 다음과 같습니다레벨 별 AVL 트리 인쇄 (C++)

void printOrder(TreeNode *treePtr, int *row) { 
    if(treePtr != NULL){ 
     (*row)++; 
     printOrder(treePtr->rightPtr,row); 
     int i; 
     for(i=0;i<(*row);i--) 
      printf("\t"); 
     printf("%d\n", treePtr->data); 
     printOrder(treePtr->leftPtr,row); 
     (*row)--; 
    } 
} 

void printTree(TreeNode *treePtr) { 
    int row = 0; 
    printOrder(treePtr,&row); 
} 

결과 :

  80 
    70 
50 
    40 
      30 

내가 이런 식으로해야 원하는 결과 :

 30\ 
      40\ 
       50 
      70/ 
     80/ 

답변

0

먼저 (당신의 트리를 탐색 할 수 이미 수행 한대로) std::vector에 직접 입력하는 대신 모든 항목을 추가하면

와 같은 요소 시퀀스가 ​​생성됩니다
{80,70,50,40,30} 

다음은

{30,40,50,70,80} 

의 결과로 벡터의 내용을 역 지금 바로 벡터를 통해 반복에 의해, 당신이 원하는 그 형태의 콘텐츠를 인쇄 할 수 있습니다.

올바른 의도를 얻으려면 std::pair 개의 요소를 벡터에 저장할 수 있습니다. 의도 수준을 두 번째 요소로 포함 할 수 있습니다.

{{80,0},{70,1},{50,2},{40,1},{30,0}} 

인쇄용으로 최대 의도 수준에서 수를 뺍니다. 다른 방법

또는, 이송 라인

printOrder(treePtr->rightPtr,row); 

printOrder(treePtr->leftPtr,row); 

하고 원하는대로 인쇄를 교환하여 왼쪽 중앙에서 오른쪽
에 나무.

+0

어떻게 직접 인쇄하고 싶습니까? –

+0

@Michael Loew 필자가 마지막 문장에서 제안했듯이 다음 행을 교환하여 왼쪽 중간 순서로 트리를 가로 질렀다.''printOrder (treePtr-> rightPtr, row); ''와''printOrder (treePtr-> leftPtr , 행); ' – cwschmidt