gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:30:21 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com