Dominik Torreto
Ученик
(149)
5 лет назад
Ты не тут спрашивай, а на спец форумах, тут аудитория ватных одноклассников врят ли тебе ответит
Daniel BovetМыслитель (5194)
5 лет назад
Если бы в этой дырище хотя бы было форматирование кода, было бы не так уныло отвечать, а то напишешь красивый код, вставил - получил черт знает что. Я уже не говорю о том, что раздела C/C++ в принципе нет, только хреновеб.
...Гений (84839)
5 лет назад
Скорее глядя на эту простыню мало кто просто так захочет разбираться. Как и на любом другом форуме.
...Гений (84839)
5 лет назад
Даже файла нет. из которого чтение и его содержимого. Есс-но никто не ответит
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;
}