У меня есть двоичное дерево поиска, в которое я могу поместить пользовательский ввод и поместить в него массив.Моя проблема в том, что когда я вызываю функцию удаления узла, ничего не удаляется.Ниже приведен мой код.Я удалил весь ненужный код.Все, что осталось, это работающая функция ввода и сломанная функция удаления.Я поместил функцию удаления и другие функции с ней сверху перед основной, чтобы ее было легче увидеть.Вход ниже основного
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <stdbool.h>
#include <string.h>
#include <malloc.h>
#define MAX 10
char* nameArray[] = { "Bob", "Troy", "Luna", "Glen", "Tat",
"Hut", "Tree", "Troy", "Steve", "Tucker", NULL };
char* number[] = { "610-11-1212", "508-123-1000", "617-555-1212",
"818-919-8100", "710-777-1170", "310-333-1300", "510-555-1001","333-310-3201", "445-440-0044", "220-210-2210", NULL };
char* ID[] = { "610-11-1212", "508-123-1000", "617-555-1212",
"818-919-8100", "710-777-1170", "310-333-1300", "510-555-1001","333-310-3201", "445-440-0044", "220-210-2210", NULL };
char* hours[] = { "610-11-1212", "508-123-1000", "617-555-1212",
"818-919-8100", "710-777-1170", "310-333-1300", "510-555-1001","333-310-3201", "445-440-0044", "220-210-2210", NULL };
char* pay[] = { "610-11-1212", "508-123-1000", "617-555-1212",
"818-919-8100", "710-777-1170", "310-333-1300", "510-555-1001","333-310-3201", "445-440-0044", "220-210-2210", NULL };
int flag;
typedef struct node
{
char* name;
char* phoneNum;
char* ID;
char* hours;
char* pay;
struct node * left;
struct node * right;
} node_t;
struct node * minValueNode(struct node* node)
{
struct node* current = node;
while (current->left != NULL)
current = current->left;
return current;
}
struct node* deleteNode(struct node* root, char* name)
{
if (root == NULL) return root;
if (name < root->name)
root->left = deleteNode(root->left, name);
else if (name > root->name)
root->right = deleteNode(root->right, name);
else
{
if (root->left == NULL)
{
struct node *temp = root->right;
free(root);
return temp;
}
else if (root->right == NULL)
{
struct node *temp = root->left;
free(root);
return temp;
}
struct node* temp = minValueNode(root->right);
root->name = temp->name;
root->right = deleteNode(root->right, temp->name);
}
return root;
}
int main()
{
node_t * test_list = malloc(sizeof(node_t));
test_list->name = "";
test_list->phoneNum = "";
test_list->ID = "";
test_list->hours = "";
test_list->pay = "";
test_list->left = NULL;
test_list->right = NULL;
for (int i = 0; i < MAX; i++) {
insert(test_list, nameArray[i], number[i], ID[i], hours[i], pay[i]);
}
print_tree_inorder(test_list);
int choice;
bool x = true;
while (x != false) {
printf("Please chose one of the following options: \n1: Print list\n5:Delete someone\n9:END\n");
scanf("%d", &choice);
switch (choice)
{
case 1:
print_tree_inorder(test_list);
break;
case 5:
;//this has to be here so I can scan. Not errors
char* deleteName = malloc(51);
printf("Please enter in Name to delete entry: ");
scanf("%50s", deleteName);
deleteNode(test_list, deleteName);
printf("\n\nNEW LIST\n\n");
print_tree_inorder(test_list);
break;
case 9:
x = false;
break;
default:
printf("NOT FOUND");
break;
}
}
return 0;
}
Здесь вывод
Bob 610-11-1212
Glen 818-919-8100
Hut 310-333-1300
Luna 617-555-1212
Steve 445-440-0044
Tat 710-777-1170
Tree 510-555-1001
Troy 508-123-1000
Troy 333-310-3201
Tucker 220-210-2210
Please chose one of the following options:
1: Print list
4:Input New Person
5:Delete someone
9:END
5
Please enter in Name to delete entry: Tucker
NEW LIST
Bob 610-11-1212
Glen 818-919-8100
Hut 310-333-1300
Luna 617-555-1212
Steve 445-440-0044
Tat 710-777-1170
Tree 510-555-1001
Troy 508-123-1000
Troy 333-310-3201
Tucker 220-210-2210
Please chose one of the following options:
1: Print list
4:Input New Person
5:Delete someone
9:END
1
Bob 610-11-1212
Glen 818-919-8100
Hut 310-333-1300
Luna 617-555-1212
Steve 445-440-0044
Tat 710-777-1170
Tree 510-555-1001
Troy 508-123-1000
Troy 333-310-3201
Tucker 220-210-2210
Please chose one of the following options:
1: Print list
4:Input New Person
5:Delete someone
9:END
Что я делаю не так с функцией удаления?Извините, если ошибка очевидна.Я новичок в синтаксисе C, но все еще хочу научиться делать это!Также игнорируйте неверные данные, поступающие в массивы за идентификационные часы и оплату, хотя их количество равно количеству, это не должно иметь никакого значения.