gpt4 book ai didi

c - 在递归函数中返回和使用多个树结构

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

我有一个函数 get_trees(),它对复杂的树结构 T 进行操作并返回两个组件树结构 A 和 B。我能够使其工作的唯一方法是创建一个新的结构 C,其中的指针指向A 和 B,然后作为参数传递给函数,同时也是返回值:

typedef struct Composite {
itree *A;
itree *B;
} composite;

composite *get_trees(complextree *T, itree *A, itree *B, composite *C);

树 A 和 B 的根节点在另一个函数中初始化:

itree *A = new_itree(0);
itree *B = new_itree(0);
A->n = T->a;
B->n = T->b;
composite *C;
C = get_trees(T, A, B, C);

get_trees() 沿着复杂树 T 的分支向下走,分配并填充 A 和 B 的节点,并在子节点上递归地调用自身。简化代码:

//code for allocating subnodes of A and B     
if (T->nodes != NULL){
for (i=0; i< T->nn; i++){
//code for computing p & q
C = get_trees(T->nodes[i], A->nodes[p], B->nodes[q]);
}
}

代码运行良好。不过看起来很丑。

(1) C 没有内在含义,即用于允许返回多个值。还有其他选择吗?大致如下:

(2)是否可以编写具有以下签名的递归函数:

void get_trees(T, A, B);

似乎如果我将 A 和 B 的根节点作为参数传递,并且子节点在递归函数内分配,那么可以说存在一个连续的命令链,并且当递归调用完成时整个树应该可用。它对我不起作用,所以一定不允许。如果有人能解释为什么会出现这种情况,或者是否可以有更优雅的解决方案,我将不胜感激?

谢谢,节日快乐。〜RT

最佳答案

您所做的是将多个指针值作为函数的返回值返回的唯一方法。但这不被认为是好的形式。

好的形式是声明您的函数具有输出参数和输入参数,并使用返回值来指示成功或失败。像这样

bool get_trees(complextree *T, itree *A, itree *B, composite *C, itree ** AOut, itree** BOut); 

关于c - 在递归函数中返回和使用多个树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1964820/

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