2016-11-25 52 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