C语言中二叉树的迭代器方法

C语言中二叉树的迭代器方法,c,function,tree,iterator,binary-tree,C,Function,Tree,Iterator,Binary Tree,我已经得到了下面的代码来生成一个迭代器方法,用于C语言中的二叉树,即对二叉树中的每个值应用一个函数 int bst\u char\u iterate(bst\u char*t,char(*fun)(char项)) “Bst_char*t”相当于指向树的指针,“*fun”相当于指向函数调用的指针,“item”是调用函数的值 我认为迭代器实际上应该作为空函数来完成,所以我不知道如何实现这一点 请帮忙 编辑:我得到的指示如下: 向库中添加一个新方法,将函数应用于每个值 在树上。(这是树的迭代器方法。)

我已经得到了下面的代码来生成一个迭代器方法,用于C语言中的二叉树,即对二叉树中的每个值应用一个函数

int bst\u char\u iterate(bst\u char*t,char(*fun)(char项))

“Bst_char*t”相当于指向树的指针,“*fun”相当于指向函数调用的指针,“item”是调用函数的值

我认为迭代器实际上应该作为空函数来完成,所以我不知道如何实现这一点

请帮忙

编辑:我得到的指示如下:

向库中添加一个新方法,将函数应用于每个值 在树上。(这是树的迭代器方法。)

int bst_char_iterate(bst_char*t,char(*fun)(char项))

注意:只有当 传递给它的函数是单调的。函数f是单调的


x您可能应该返回给定项目之后的下一个BST项目。然后,可以使用新返回的项再次调用该函数,然后它应该返回该项,依此类推,直到到达末尾


因此,您需要一个特殊的值来指示没有其他项目剩余;可能是0?

您可能应该返回给定项目之后的下一个BST项目。然后,可以使用新返回的项再次调用该函数,然后它应该返回该项,依此类推,直到到达末尾


因此,您需要一个特殊的值来指示没有其他项目剩余;可能是0?

您可能应该返回给定项目之后的下一个BST项目。然后,可以使用新返回的项再次调用该函数,然后它应该返回该项,依此类推,直到到达末尾


因此,您需要一个特殊的值来指示没有其他项目剩余;可能是0?

您可能应该返回给定项目之后的下一个BST项目。然后,可以使用新返回的项再次调用该函数,然后它应该返回该项,依此类推,直到到达末尾

因此,您需要一个特殊的值来指示没有其他项目剩余;可能是0?

您说您想要一个“迭代器”方法,但随后您将其描述为“将函数应用于树中的每个值”,这是一个“应用”方法,而不是“迭代器”方法。迭代器方法通常引用数据结构中的某个元素,并返回对下一个元素的引用(或修改引用以引用下一个元素)。那么,您是想要一个实际的迭代方法,还是想要一个将要调用“iterate”的apply方法,从而混淆代码的所有未来读者

如果是后者,则需要一个遍历树的函数,为每个值调用该函数。一个简单的递归遍历应该可以做到这一点:

void bst_char_apply(bst_char *t, void (*fun)(char item)) {
    if (t->left) bst_char_apply(t->left, fun);
    fun(t->value);
    if (t->right) bst_char_apply(t->right, fun);
}
您说您需要一个“迭代器”方法,但随后您将其描述为“将函数应用于树中的每个值”,这是一个“应用”方法,而不是“迭代器”方法。迭代器方法通常引用数据结构中的某个元素,并返回对下一个元素的引用(或修改引用以引用下一个元素)。那么,您是想要一个实际的迭代方法,还是想要一个将要调用“iterate”的apply方法,从而混淆代码的所有未来读者

如果是后者,则需要一个遍历树的函数,为每个值调用该函数。一个简单的递归遍历应该可以做到这一点:

void bst_char_apply(bst_char *t, void (*fun)(char item)) {
    if (t->left) bst_char_apply(t->left, fun);
    fun(t->value);
    if (t->right) bst_char_apply(t->right, fun);
}
您说您需要一个“迭代器”方法,但随后您将其描述为“将函数应用于树中的每个值”,这是一个“应用”方法,而不是“迭代器”方法。迭代器方法通常引用数据结构中的某个元素,并返回对下一个元素的引用(或修改引用以引用下一个元素)。那么,您是想要一个实际的迭代方法,还是想要一个将要调用“iterate”的apply方法,从而混淆代码的所有未来读者

如果是后者,则需要一个遍历树的函数,为每个值调用该函数。一个简单的递归遍历应该可以做到这一点:

void bst_char_apply(bst_char *t, void (*fun)(char item)) {
    if (t->left) bst_char_apply(t->left, fun);
    fun(t->value);
    if (t->right) bst_char_apply(t->right, fun);
}
您说您需要一个“迭代器”方法,但随后您将其描述为“将函数应用于树中的每个值”,这是一个“应用”方法,而不是“迭代器”方法。迭代器方法通常引用数据结构中的某个元素,并返回对下一个元素的引用(或修改引用以引用下一个元素)。那么,您是想要一个实际的迭代方法,还是想要一个将要调用“iterate”的apply方法,从而混淆代码的所有未来读者

如果是后者,则需要一个遍历树的函数,为每个值调用该函数。一个简单的递归遍历应该可以做到这一点:

void bst_char_apply(bst_char *t, void (*fun)(char item)) {
    if (t->left) bst_char_apply(t->left, fun);
    fun(t->value);
    if (t->right) bst_char_apply(t->right, fun);
}

我不明白你所说的“迭代器实际上应该作为空函数来完成”。这看起来你应该在每个节点上按顺序遍历bst和
node->item=fun(node->item)
“迭代器实际上应该作为void函数来完成”。看起来您应该按顺序遍历bst和
node->item=fun(node->item)
在每个节点上。是否有人指导您如何处理
*fun
的返回值,或者您的函数最终应以
int
的形式返回?我不理解您所说的“迭代器应真正作为无效函数来执行”的意思“。看起来您应该按顺序遍历bst,并在每个节点上遍历
node->item=fun(node->item)
。您是否得到了有关