C++ 逐级打印AVL树(C+;+;)

C++ 逐级打印AVL树(C+;+;),c++,pretty-print,avl-tree,C++,Pretty Print,Avl Tree,我是初学者。我正试图打印一个avl树一级一级,它应该是从右到左。但结果是从左到右。我希望你能解决我的问题。以下是我的源代码: void printOrder( TreeNode *treePtr, int *row) { if(treePtr != NULL){ (*row)++; printOrder(treePtr->rightPtr,row); int i; for(i=0;i<(*row);i--)

我是初学者。我正试图打印一个avl树一级一级,它应该是从右到左。但结果是从左到右。我希望你能解决我的问题。以下是我的源代码:

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);
}
我想要的结果应该是这样的:

       30\
            40\
                50
            70/
        80/

您可以首先遍历树(就像您已经做的那样),将每个条目添加到
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);


然后根据需要打印。

如果我想直接打印,该怎么办?@Michael Loew,正如我在最后一句话中建议的那样:通过交换以下行来按左-中-右顺序遍历树
“printOrder(Treepr->rightPtr,row);”
'printOrder(treePtr->leftPtr,row);'
printOrder(treePtr->rightPtr,row);
printOrder(treePtr->leftPtr,row);