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