Мне был предоставлен следующий код, чтобы сделать метод итератора для использования на двоичном дереве в C. Это значит применить функцию к каждому значению в двоичном дереве.Метод Итератора для двоичного дерева в C
int bst_char_iterate(bst_char *t, char (*fun)(char item))
«Bst_char * т» приравнивания к указателю на дереве, «* забава» приравнивания к указателю на вызов функции и «элемент» является значением, которое функция вызывается после.
Я думал, что итераторы действительно должны выполняться как недействительные функции, поэтому я теряюсь относительно того, как подойти к этому.
Пожалуйста, помогите!
Edit: Команда у меня была следующая:
Добавить новый метод в библиотеку, которая применяет функцию к каждому значению в дереве. (Это метод итератора для деревьев.)
INT bst_char_iterate (bst_char * т, символ (* весело) (голец пункт))
NB: Свойство BST будет сохранен только этим методом, если переданная ему функция монотонна. Функция f является монотонной, когда
x < = y (стрелка) f (x) < = f (y).
Edit 2: Следующие не работает для меня:
int bst_char_iterate(bst_char *t, char (*fun)(char item)) {
assert(t!=NULL);
struct node * p = t->root;
if (p!=NULL) {
p->item = fun(p->item);
p->left->item = bst_char_iterate(t,fun(p->left));
p->right->item = bst_char_iterate(t,fun(p->right));
} else {
return 0;
}
}
С довольно много ошибок. Может ли кто-нибудь помочь?
Я не понимаю, что вы подразумеваете под «итераторами, которые действительно должны выполняться как функции пустоты». Похоже, вам нужно просто выполнить обход в порядке bst и 'node-> item = fun (node-> item)' на каждом узле. – Michael
Были ли вы даны какие-либо рекомендации относительно того, что делать с возвращаемым значением '* fun' или то, что ваша функция должна в конечном итоге вернуться как' int'? – woolstar