2016-11-25 62 views
-2

我是初學者。我試圖按級別打印avl樹,它應該從右到左。但結果從左到右。我希望你能解決我的問題。下面是一段我的源代碼:打印AVL Tree level by level(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} 

向量的內容現在打印你想要那種形式的內容,僅通過遍歷矢量。

爲了獲得正確的intendation,可以將std::pair元素存儲在向量中,其中包含作爲第二個元素的intendation級別,例如,

{{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