删除AVL树不起作用的功能

时间:2019-06-03 19:39:33

标签: c binary-search-tree avl-tree

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);
                }
            }
        }
    }
}
}

0 个答案:

没有答案