我回到 K&R 以阅读一章,并注意到我之前省略的一个示例。 本章涵盖了二叉树数据类型的主题。我了解在节点中存储新条目,但打印功能让我感到困惑。为什么先打印左边的部分?
如果 printf
是函数中的第一个命令,然后是 left 和 right,它会工作吗?
如果不是,为什么?
/* treeprint: in-order print of tree p */
void treeprint(struct tnode *p)
{
if (p != NULL) {
treeprint(p->left);
printf("%4d %s\n", p->count, p->word);
treeprint(p->right);
}
}
最佳答案
首先从左侧下降,然后打印节点本身,然后从右侧下降,这就是此操作有序树遍历的原因。如果您将 printf
移动到左下降之前,正如您所建议的那样,这将使其成为 pre-order 遍历。如果您先进行两次下降,那将是后序。所有三种可能性都以三种不同的顺序访问所有节点。
考虑简单的树
*
/ \
a +
/ \
b c
如果你按预定顺序遍历这棵树,你会得到
* a + b c
按顺序,
a * b + c
下单后,
a b c + *
您想要这些可能性中的哪一种取决于您在做什么。
关于c - 二叉树元素的递归 printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12466136/