Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2018, 16:52   #1
maximo171
Новичок
Джуниор
 
Регистрация: 10.12.2018
Сообщений: 1
По умолчанию Си Бинарное дерево , неправильный ответ выдает функция

Функции next и prev выдают неправильные результаты (
next x — выведите минимальный элемент в дереве, строго больший x, или «none» если такого
нет
prev x — выведите максимальный элемент в дереве, строго меньший x, или «none» если такого
нет
Допустим я ввел дерево 2 5 3 у меня next 4 выводит none. prev 4 выводит 2. После удаления 5, выводит при next 4 none . При prev 4 выводит 3. Не понимаю в чем проблема, помогите!
Код:
Node* next(Node *root, T x) {
Node* current = root; Node* successor = NULL; // root — корень дерева
while (current != NULL)
if (current->data > x) {
successor = current;
current = current->left;
}
else
{
current = current->right;
return successor;
}
}
Node* prev(Node *root, T x) {
Node* current = root; Node* successor = NULL; // root — корень дерева
while (current != NULL)
if (current->data < x) {
successor = current;
current = current->right;
}
else
{
current = current->left;
return successor;
}
}

void printTree(Node *root, const char *dir, int level) {
if (root) {
printf("lvl %d %s = %d\n", level, dir, root->data);
printTree(root->left, "left", level + 1);
printTree(root->right, "right", level + 1);
}
}
void main() {
Node *root = NULL;
char str[10];
int c;
FILE *f;
f = fopen("sort.txt", "r");
FILE *f2;
f2 = fopen("sort2.txt", "w");
for (int i = 0; i < 10; i++)
{
fscanf(f, "%s", str);
fscanf(f, "%d", &c);
if (strcmp(str, "insert") == 0)
{
insert(&root, c);
}
else if (strcmp(str, "delete") == 0)
{
root = delete(root, c);
}
else if (strcmp(str, "exists") == 0)
{
fprintf(f2, "%s\n", getNodeByValue(root, c) ? "true" : "false");
}
else if (strcmp(str, "next") == 0)
{
Node* node = next(root, c);
if (node)
fprintf(f2, "%d\n", node->data);
else
fprintf(f2, "%s\n", "none");
}
else if (strcmp(str, "prev") == 0)
{
Node* node = prev(root, c);
if (node)
fprintf(f2, "%d\n", node->data);
else
fprintf(f2, "%s\n", "none");

}
else printf("ERROR");
printTree;

}

fclose(f);
fclose(f2);
printTree(root, "root", 0);
return 0;
}
maximo171 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# Можете объяснить почему программа выдает неправильный ответ? shkap Помощь студентам 4 07.06.2017 18:41
Метод Ньютона (касательных), программа выдает неправильный результат Alexandr- Помощь студентам 3 01.12.2016 00:19
Выдает неправильный ответ - метод половинного деления. Срочно!!! cyx Помощь студентам 0 15.05.2015 23:56
Неправильный ответ Tatyana64 Помощь студентам 8 11.11.2012 00:09
Бинарное дерево! pawel32 Помощь студентам 3 14.11.2011 22:40