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