C语言中二叉树的迭代器方法
我已经得到了下面的代码来生成一个迭代器方法,用于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”是调用函数的值 我认为迭代器实际上应该作为空函数来完成,所以我不知道如何实现这一点 请帮忙 编辑:我得到的指示如下: 向库中添加一个新方法,将函数应用于每个值 在树上。(这是树的迭代器方法。)
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)
。您是否得到了有关