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;
}