コード例 #1
0
ファイル: grafo.c プロジェクト: gvs11/BCC
//------------------------------------------------------------------------------
lista ordena_vertice(grafo g, vertice r, lista l) {
    lista l2;
    aresta_t a;

    r->processado = 2;

    for (a = r->aresta; a; a = a->next) {
        if (a->vertice->processado == 2) {
            return NULL;
        }

        if (!a->vertice->processado) {
            a->vertice->pai = r;
            l2 = ordena_vertice(g, a->vertice, l);

            if (!l2) {
                return NULL;
            }
        }
    }

    r->processado = 1;

    l = insere_no(l, r);

    return l;
}
コード例 #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;
 }