c - 二叉搜索树结果不明确
问题描述
在准备考试时试图了解二叉树,我遇到了这段代码。即使它看起来很有意义,我也无法理解它的目的以及它的实际工作原理,所以有人可以详细说明一下吗?
这是我得到的结果:https ://i.ibb.co/3TTjJBr/kkkkkkkkkkkkj.jpg
space += 5;
print_tree(root->right, space);
printf("\n");
for (int i = 5; i < space; i++) {
printf(" ");
}
printf("%d\n", root->number);
print_tree(root->left, space);
解决方案
你有这个二叉树
24 / \ 18 31 / \ / \ 11 20 29 33 / \ \ 7 21 55
您需要在左侧打印它,并在右侧“增长”。所以依次遍历树(右子树、根、左子树)。
print_tree
被递归调用,因此打印的第一个数字是较大的一个 ( 55
),其水平位置由调用次数 ( space += 5
) 确定。请注意,打印空格的循环从 5 开始,因此根始终在其子树左侧打印 5 个空格。它可以写成
print_tree(root->right, space + 5);
putchar('\n');
for (int i = 0; i < space; i++) {
putchar(' ');
}
printf("%d\n", root->number);
print_tree(root->left, space + 5);