c - 存储树的遍历

标签 c

我有这个函数可以找到二叉树的预序。我有点不确定如何编辑它来存储遍历而不是打印它。我可能想将它存储在一个数组中,这样我就可以将它与另一个遍历进行比较,但是在这个函数中创建一个数组将是一个问题,因为我递归地实现了它。有任何想法吗? 我正在考虑向它传递一个空数组,但由于函数是递归的,我似乎无法想象我将如何递增数组。

void preorder(node *node)
{
    if(node == NULL)
         return;

    printf("%d", node->data);
    preorder(node->left);
    preorder(node->right);
}

最佳答案

您走在正确的轨道上。是的,传入一个最初为空的数组。还要传递一个初始化为 0 的索引,以跟踪您填充了多少数组。*index 表示下一个可用于填充数据的数组索引。仅当您在数组中填充数据时才增加索引。递归情况将自然处理。每次调用 inorder 都会将索引递增 1。

void inorder(node *node, int *array, int *index)
{
    if (node == NULL)
        return;

    inorder(node->left, array, index);

    array[(*index)++] = node->data;

    inorder(node->right, array, index);
}

关于c - 存储树的遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42756655/

相关文章:

c - 编译器如何在 C 中将数组初始化(为零)?

C-从列表中检索元素

c - OpenCl 内核返回异常巨大的数字

c - 将参数传递给循环中的线程

c - 静态链接 glibc,但使用 GCC 动态链接其他一些库

c - 如何用C语言从文本文件中读取数据点

iphone - floor 小数点后加倍

计算预处理器宏中的调用次数

c - 是否打开了一个文件来代替缓冲的 stderr?

c - 指向字符的指针