示例#1
0
Arv* arv_insere (Arv* a, infotype valor, Arv* pai){
 
    if (arv_vazia(a)){

            a = arv_criafolha (valor, pai);

    }

    else {

        if (valor < a -> info){

           a -> esq = arv_insere (a -> esq, valor, a);

        }

        else {

            a -> dir = arv_insere (a -> dir, valor, a);

        }

    }
    
    return a;
}
示例#2
0
Arv* arv_reconstroi (Arv* arv, Fila* preordem, infotype *vetDFS, infotype inicio, infotype tamanho){

    infotype pivo, x = 0;
   
   /* Enquanto houver elementos na fila do percorrimento preordem significa que ainda temos que
   percorrer a árvore e reconstrui-la */

    while (!fila_vazia(preordem)){

        x = fila_remove (preordem);

        arv = arv_insere (arv, x, arv);

        /* Encontramos o pivô do vetor DFS que representa a raiz da árvore */
        pivo = particiona (preordem, vetDFS, inicio, tamanho, x);

        /* Constrói subárvore esquerda recursivamente com a raiz da árvore sendo
        a raiz da subárvore esquerda */
        arv = arv_reconstroi (arv, preordem, vetDFS, inicio, pivo - 1);

        /* Constrói subárvore direita recursivamente com a raiz da árvore sendo
        a raiz da subárvore direita */
        arv = arv_reconstroi (arv, preordem, vetDFS, pivo + 1, tamanho);

    }

    return arv;
}
示例#3
0
int main(int argc, char **argv) {
    ArvBB *arv= arv_criar(mostra_long,NULL,compara_long);
    long chave = 10;
    //int data[]={32,16,34,1,87,13,7,18,14,19,23,24,41,5,53};
    long* data[]={crial(42),crial(11),crial(28),crial(15),
                  crial(86),crial(53),crial(97),crial(63),
                  crial(35),crial(55)};
    for(int i=0;i<10;i++){
        arv_insere(arv,data[i]);
    }
    arv_inordem(arv);
    printf("\n");
    arv_preordem(arv);
    printf("\nBUSCA\n");
    if(arv_busca_bin(arv,&chave)){ printf("Encontrou %ld\n",chave);}else{printf("NAO encontrou %ld\n",chave);}
    chave=11;
    if(arv_busca_bin(arv,&chave)){ printf("Encontrou %ld\n",chave);}else{printf("NAO encontrou %ld\n",chave);}
    chave=7;
    if(arv_busca_bin(arv,&chave)){ printf("Encontrou %ld\n",chave);}else{printf("NAO encontrou %ld\n",chave);}
    chave=97;
    if(arv_busca_bin(arv,&chave)){ printf("Encontrou %ld\n",chave);}else{printf("NAO encontrou %ld\n",chave);}
    printf("\nREMOVE\n");
    printf("Tamanho: [%ld]\n",arv_tamanho(arv));
    printf("Remove: %s\n",codigo_erro_cstr(arv_remove2(arv,data[4])));
    printf("Tamanho: [%ld]\n",arv_tamanho(arv));
    printf("\n");
    arv_preordem(arv);
    chave=42;
    printf("Remove: %s\n",codigo_erro_cstr(arv_remove2(arv,&chave)));
    printf("Tamanho: [%ld]\n",arv_tamanho(arv));
//    arv_inordem(arv);
    printf("\n");
    arv_preordem(arv);
    arv_destruir(&arv);
    for(int i=0;i<10;i++){
        destroi_long(data[i]);
    }
    return 0;
}