Удалить функцию для дерева AVL не работает - PullRequest
0 голосов
/ 03 июня 2019

Переменные в scrut являются частью целей проекта, единственно важным является «codigo», который работает как значение, которое ищется в дереве, direita - это правильно, esquerda - это оставлено, а pai - это отец, эти являются единственными, которые имеют значение в процессе удаления, функция предназначена для удаления и балансировки дерева, но она ничего не делает, когда я пытаюсь удалить любую запись, может кто-нибудь сказать мне, что не так, пожалуйста? если вам нужен остальной код и основной файл, просто спросите, структура находится в заголовочном файле, а функция в .c файле «VrotacaoRR или LL» - это функции, которые поворачивают значения для баланса. VabpAltura измеряет высоту дерево

Примечание: ошибки нет, просто не работает

Я проверил повороты, по сравнению с примером кода, который я нашел, но вместо int я должен использовать строку


typedef struct ABP1
{
char codigo[5]; char descricao[5];
int preco, dataInicio, dataFim, bal;
struct ABP1* direita;
struct ABP1* esquerda;
struct ABP1* pai;

}*viagens;

void removerViagem(viagens apt, char codigo[5])
{
char aux=NULL;
viagens v;

if (apt == NULL)
{
    return 0;
}

if (strcmp(apt->codigo, codigo)<0)
{
    removerViagem((apt->esquerda), codigo);
    apt->bal = VabpAltura(apt->esquerda) - VabpAltura(apt->direita);

    if (apt->bal == -2)
    {
        if (apt->direita->bal != 1)
        {
            apt = VrotacaoRR(apt);
        }
        else if (apt->direita->bal == 1)
        {
            apt->direita = VrotacaoLL(apt->direita);
            apt = VrotacaoRR(apt);
        }
    }
}
else
{
    if (strcmp(codigo, apt->codigo)>0)
    {
        removerViagem(apt->direita, codigo);
        apt->bal = VabpAltura(apt->esquerda) - VabpAltura(apt->direita);
        if (apt->bal == 2)
        {
            if (apt->esquerda->bal != -1)
            {
                apt = VrotacaoLL(apt);
            }
            else if (apt->esquerda->bal == -1)
            {
                apt->esquerda = VrotacaoRR(apt->esquerda);
                apt = VrotacaoLL(apt);
            }
        }
    }
    else
    {
        if (strcmp(apt->codigo,codigo)==0)
        {
            if (apt->esquerda == NULL && apt->direita == NULL)
            {
                free(apt);
                apt = NULL;
            }
            else
            {
                if ((apt->esquerda == NULL && apt->direita != NULL) || apt->bal == -1)
                {
                    v = apt->direita;
                    while (v->esquerda != NULL)
                    {
                        v = v->esquerda;
                    }
                    strcpy(aux, v->codigo);
                    removerViagem(apt, v->codigo);
                    strcpy(apt->codigo,codigo);
                }
            }
        }
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...