C 如何在递归函数中寻址树

C 如何在递归函数中寻址树,c,arrays,recursion,binary-tree,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 L

我已经有了一个二叉树(不平衡),每个节点都有一个关联的*团队。但是,当我尝试将树转换为数组时,
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);

    }
}

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

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

int TreeToVector(TreePointer树,Team*t,int-sizeofarray,int-i)
int TreeToVector(TreePointer tree, Team *t, int sizeofarray, int i)
{
    if(tree == NULL) return i;

    t[i++].team = tree->T.team;

    // Travel left tree
    if(i < sizeofarray)
             i = TreeToVector(tree->Left, t, sizeofarray, i);

    // Travel right tree
    if(i < sizeofarray)
             i = TreeToVector(tree->Right, t, sizeofarray, i);

    // Return current index of t
    return i;
}
{ 如果(tree==NULL)返回i; t[i++].team=tree->t.team; //左行树 如果(i左,t,sizeofarray,i); //右行树 如果(i右,t,sizeofarray,i); //t的返回电流指数 返回i; }
它甚至不应该构建更少的运行。
i=TreeToVector(…)
如果
TreeToVector
没有返回任何内容,该怎么办?@Someprogrammerdude我已经更改了代码,我可以编辑问题还是将其作为评论发布?请编辑您的问题以显示a。问题是什么?看起来像
(*Teamtree)->t.team
Teamtree->Left
(和Right)
Teamtree
间接寻址的级别不匹配。这就解释了“TreeToVector(Teamtree->Left,…)的地址有问题”的错误。我很确定问题出在别处。如果
Teamtree
类型为
Hash_tree**
,那么
Teamtree->Left
Teamtree->Right
指向哪里?您的代码不起作用--您不能从
void
函数返回。
int TreeToVector(TreePointer tree, Team *t, int sizeofarray, int i)
{
    if(tree == NULL) return i;

    t[i++].team = tree->T.team;

    // Travel left tree
    if(i < sizeofarray)
             i = TreeToVector(tree->Left, t, sizeofarray, i);

    // Travel right tree
    if(i < sizeofarray)
             i = TreeToVector(tree->Right, t, sizeofarray, i);

    // Return current index of t
    return i;
}