void IInsere(TipoReg x, TipoApont *Ap,TipoInclinacao *IAp, short *Fim) { if (*Ap == NULL) { *Ap = (TipoApont)malloc(sizeof(TipoNo)); *IAp = Horizontal; (*Ap)->Reg = x; (*Ap)->BitE = Vertical; (*Ap)->BitD = Vertical; (*Ap)->Esq = NULL; (*Ap)->Dir = NULL; *Fim = FALSE; return; } if (x.Chave < (*Ap)->Reg.Chave) { IInsere(x, &(*Ap)->Esq, &(*Ap)->BitE, Fim); if (*Fim) return; if ((*Ap)->BitE != Horizontal) { *Fim = TRUE; return; } if ((*Ap)->Esq->BitE == Horizontal) { EE(Ap); *IAp = Horizontal; return; } if ((*Ap)->Esq->BitD == Horizontal) { ED(Ap); *IAp = Horizontal; } return; } //COMPARA플O AQUI if (x.Chave <= (*Ap)->Reg.Chave) { printf("Erro: Chave ja esta na arvore\n"); *Fim = TRUE; return; } IInsere(x, &(*Ap)->Dir, &(*Ap)->BitD, Fim); if (*Fim) return; if ((*Ap)->BitD != Horizontal) { *Fim = TRUE; return; } if ((*Ap)->Dir->BitD == Horizontal) { DD(Ap); *IAp = Horizontal; return;} if ((*Ap)->Dir->BitE == Horizontal) { DE(Ap); *IAp = Horizontal; } }
void IInsere(TipoItem x, ApontadorNo *Ap, Inclinacao *IAp, short *Fim) { if (*Ap == NULL) { *Ap = (ApontadorNo)malloc(sizeof(No)); *IAp = Horizontal; (*Ap)->Reg = x; (*Ap)->BitE = Vertical; (*Ap)->BitD = Vertical; (*Ap)->Esq = NULL; (*Ap)->Dir = NULL; *Fim = FALSE; return; } if (x.cod < (*Ap)->Reg.cod) { IInsere(x, &(*Ap)->Esq, &(*Ap)->BitE, Fim); if (*Fim) return; if ((*Ap)->BitE != Horizontal) { *Fim = TRUE; return; } if ((*Ap)->Esq->BitE == Horizontal) { EE(Ap); *IAp = Horizontal; return; } if ((*Ap)->Esq->BitD == Horizontal) { ED(Ap); *IAp = Horizontal; } return; } IInsere(x, &(*Ap)->Dir, &(*Ap)->BitD, Fim); if (*Fim) return; if ((*Ap)->BitD != Horizontal) { *Fim = TRUE; return; } if ((*Ap)->Dir->BitD == Horizontal) { DD(Ap); *IAp = Horizontal; return; } if ((*Ap)->Dir->BitE == Horizontal) { DE(Ap); *IAp = Horizontal; } }
void Insere(TipoItem x, ApontadorNo *Ap) { short Fim; Inclinacao IAp; IInsere(x, Ap, &IAp, &Fim); }
void SbbInsere(TipoReg x, TipoApont *Ap) { short Fim; TipoInclinacao IAp; IInsere(x, Ap, &IAp, &Fim); }