二叉搜索树结果不明确



在准备考试时试图了解二叉树,我遇到了这段代码。即使看起来这是有道理的,我根本无法理解这样做的目的以及它的实际工作原理,所以任何人都可以详细说明吗?

这是我得到的结果: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("%dn", 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("%dn", root->number);  
print_tree(root->left, space + 5);

最新更新