c - 二叉树元素的递归 printf

标签 c binary-tree kernighan-and-ritchie

我回到 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/

相关文章:

c - 如何从文件中读取数字并将它们分配给多个数组? - C

c - 当我在终端中按 Ctrl+C 时,执行 C 中的最后一个函数

c - 递归二叉树

java - 打印所有高于所有叶节点的 N 级节点

c - 具有 `fcn( char *, ...)` 的可变参数函数如何知道何时结束?

c - K&R练习: Multidimensional array into pointer array

编译器给出 - 警告 C4013 : 'getche' undefined; assuming extern returning int

c - 在 C 中删除二叉树的最快方法

K&R 2 第 5.10 节中的说明

c - Linux 的嵌入式系统中断/硬件处理