逐层打印AVL树(C ++)

时间:2016-11-25 15:57:59

标签: 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--)
            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/

1 个答案:

答案 0 :(得分: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);

并根据需要打印。

相关问题