我是初学者。我试图逐级打印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/
答案 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);
并根据需要打印。