c - 如何在递归函数中寻址树

标签 c arrays recursion binary-tree

我已经有一个二叉树(不平衡),并且每个节点已经有一个与其关联的*团队。但是,当我尝试将树转换为数组时,TreeToVector(Teamtree->Left,...) 处的地址存在问题。我该如何解决?

typedef struct
{
    char *team;

}Team;

typedef struct Hash_tree *TreePointer;

typedef struct Hash_tree
{
        TreePointer Right;
        TreePointer Left;
        Team T;
}Hash_tree;

void TreeToVector(Hash_tree **Teamtree, Team *t, int sizeofarray, int i)
{
    if(Teamtree == NULL) return;
    else
    {
        t[i].team = (*Teamtree)->T.team;
        i++;
    if(Teamtree->Left != NULL && i < sizeofarray)
             i = TreeToVector(Teamtree->Left, t, sizeofarray, i);
    if(Teamtree->Right != NULL && i < size)
             i = TreeToVector(Teamtree->Right, t, sizeofarray, i);

    }
}

在main.c中:

Team t[size];
TreeToVector(Teamtree, t, size, 0);

最佳答案

因为您没有返回新值,所以当您上下跳跃时,您的 i 会被重置。您可以返回它,或者另一种方法是使其静态并在您第一次进入函数时以某种方式重置它(或者只是将其保留在函数之外)。或者将其作为指针传递,以便您可以更新相同的值。

举例来说,如果您采用第一个节点有左节点和右节点的情况,那么您可以清楚地看到相同的 i 将被传递到 TreeToVector 调用,除非您更改它。

关于c - 如何在递归函数中寻址树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51202230/

相关文章:

c - C : is return always necessary? 中的递归函数

c - 使用 OpenGL 着色器语言编写一个简单的着色器

java - 计算数组中某个值的实例数

c# - 递归函数相乘

c# - 递归方法仅从最后一次递归调用返回值

c - parasoft c++ 测试 - 编译内联汇编代码

c - D3DKMTOpenAdapterFromDeviceName 和 DeviceName

C 指向固定大小数组的现有指针

c++ - 为什么我们可以删除数组,但不知道 C/C++ 中的长度?

c++ - 将条件递归算法转换为迭代算法