コード例 #1
0
ファイル: funcoes.c プロジェクト: esbrito/BookToAVLTree
pNodoA* Caso1 (pNodoA* a , int *ok)
{
    pNodoA *ptu;

    ptu = a->esq;
    if (ptu->FB == 1)
    {
      //  printf("fazendo rotacao direita em %s\n",a->palavra);
        a = rotacao_direita(a);
    }
    else
    {
      //  printf("fazendo rotacao dupla direita em %s\n",a->palavra);
        a = rotacao_dupla_direita(a);
    }

    a->FB = 0;
    *ok = 0;
    return a;
}
コード例 #2
0
ファイル: rel_redblack.cpp プロジェクト: mtulio/kb
 void insercao(parvore *raiz, tcod v) {

			parvore x, tio, avo;

			if ( (x = insere_no(raiz, v)) == NULL )  {
					return;
			}

			x -> cor = VERMELHO;

				while (x != (*raiz) && (x -> pai -> cor == VERMELHO )) {
							avo = x -> pai -> pai;
									if (x -> pai == avo -> esq) {
										 tio = avo -> dir;
										 if (tio -> cor == VERMELHO)  {
												x -> pai -> cor = PRETO;
												tio -> cor = PRETO;
												avo -> cor = VERMELHO;
												x = avo;
											}
											else { // a cor do tio e negro
														if ( x == x -> pai -> dir) { // x, o filho  direito de seu pai
															 x = x -> pai;
															 dica_da_rotacao(*raiz," esquerda ");
															 rotacao_esquerda(&x, raiz);
														}
															 x -> pai -> cor = PRETO;
															 avo = x -> pai -> pai;
															 avo -> cor = VERMELHO;
															 dica_da_rotacao(*raiz, " direita ");
															 rotacao_direita(&avo, raiz);
										 }
									}
									else {
													// pai de x, o filho direito do avo de x.Este caso
													// semelhante ao anterior.Basta repetir o codigo acima
													// substituindo esq por dir
												 tio = avo -> esq;
												 if (tio -> cor == VERMELHO) {
														x -> pai -> cor = PRETO;
														tio -> cor = PRETO;
														avo -> cor = VERMELHO;
														x = avo;
												 }
												 else {
														 if ( x == x -> pai -> esq)  {
																														// x, o filho direito
																														// de seu pai
																x = x -> pai;
																dica_da_rotacao(*raiz, " direita ");
																rotacao_direita(&x, raiz);
														 }
																x -> pai -> cor = PRETO;
																avo = x -> pai -> pai;
																avo -> cor = VERMELHO;
																dica_da_rotacao(*raiz, " esquerda ");
																rotacao_esquerda (&avo, raiz);
												 }
									}
				}
				(*raiz) -> cor = PRETO;
 }