Diêgo João Costa Santiago
Índice
1. Escreva um algoritmo que inverta uma lista dada como entrada.
2. Escreva um algoritmo que verifique se uma árvor...
1. Escreva um algoritmo que inverta uma lista dada como
entrada.
ALGORITMO INVERTER-LISTA
ENTRADA elista que é uma PILHA
S...
1. Escreva um algoritmo que inverta uma lista dada como
entrada.
ALGORITMO INVERTER-LISTA
ENTRADA elista
SAÍDA slista
TOPO...
2. Escreva um algoritmo que verifique se uma árvore binária é
AVL.
ALGORITMO EH-AVL
ENTRADA nó = raiz da árvore
SAÍDA (alt...
3. Escreva um algoritmo que transforme uma árvore binária de
busca em uma lista contendo as chaves da árvore em ordem
cres...
4. Escreva um algoritmo que concatene duas árvores AVL em
uma árvore AVL válida.
ALGORITMO CONCATENAR-AVL
ENTRADA arv1, ar...
5. Escreva um algoritmo que construa um heap que contém
todos os elementos de dois heaps de tamanho n.
ALGORITMO UNIR-HEAP...
Próximos SlideShares
Carregando em…5
×

Revisao1

232 visualizações

Publicada em

  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Revisao1

  1. 1. Diêgo João Costa Santiago
  2. 2. Índice 1. Escreva um algoritmo que inverta uma lista dada como entrada. 2. Escreva um algoritmo que verifique se uma árvore binária é AVL. Obs1.: Cada elemento só pode ser visitado apenas uma vez; Obs2.: Cada nó aponta apenas para seus filhos. 3. Escreva um algoritmo que transforme uma árvore binária de busca em uma lista contendo as chaves da árvore em ordem crescente. 4. Escreva um algoritmo que concatene duas árvores AVL em uma árvore AVL válida. O seu algoritmo deve executar em tempo O(h), onde h é a altura máxima entre as duas árvores. Definição: A concatenação intercala duas estruturas de dados onde todas as chaves de uma são menores que todas as chaves da outra 5. Escreva um algoritmo que construa um heap que contém todos os elementos de dois heaps de tamanho n. Os heaps dados são representados através de árvores ligadas em vez de vetores (arrays), ou seja, cada nó tem ponteiro para os seus dois filhos, pai e dois irmãos. O algoritmo deve executar em tempo O(log n) no pior caso.
  3. 3. 1. Escreva um algoritmo que inverta uma lista dada como entrada. ALGORITMO INVERTER-LISTA ENTRADA elista que é uma PILHA SAÍDA slista que é uma PILHA TOPO(slista) = NIL //PILHA DE SAÍDA VAZIA ENQUANTO TOPO(elista) ≠ NIL //ENQUANTO PILHA NÃO ESTÁ VAZIA FAÇA chave = REMOVER(elista) //REMOVE O TOPO DA PILHA DE ENTRADA INSERIR(chave, slista) //INSERE NO TOPO DA PILHA DE SAÍDA FIM ENQUANTO FIM ALGORITMO
  4. 4. 1. Escreva um algoritmo que inverta uma lista dada como entrada. ALGORITMO INVERTER-LISTA ENTRADA elista SAÍDA slista TOPO(pilha) = NIL //DEFINE UMA PILHA AUXILIAR VAZIA x = CABEÇA(elista) ENQUANTO x ≠ NIL FAÇA INSERIR(CHAVE(x), pilha) //INSERE NO TOPO DE UMA PILHA AUXILIAR x = PROXIMO(x) FIM PARA CABEÇA(slista) = TOPO(pilha) //INSERE TODOS AS CHAVES DA PILHA AUXILIAR NA LISTA DE SAÍDA FIM ALGORITMO
  5. 5. 2. Escreva um algoritmo que verifique se uma árvore binária é AVL. ALGORITMO EH-AVL ENTRADA nó = raiz da árvore SAÍDA (alt = altura da árvore, ehAVL = se árvore é AVL) SE nó = NIL ENTÃO (alt, ehAVL) = (0, TRUE) //CASO BASE SENÃO (altdir, ehAVLdir) = EH-AVL(ESQUERDA(nó)) //RECURSÃO NA SUB-ÁRVORE ESQUERDA (altesq, ehAVLesq) = EH-AVL(DIREITA(nó)) //RECURSÃO NA SUB-ÁRVORE DIREITA alt = máximo(altdir, altesq) + 1 ehAVL = ehAVLdir E ehAVLesq E (absoluto(altdir - altesq) ≤ 1) FIM SE FIM ALGORITMO
  6. 6. 3. Escreva um algoritmo que transforme uma árvore binária de busca em uma lista contendo as chaves da árvore em ordem crescente. ALGORITMO BUSCA-IN-ORDEM ENTRADAS nó = raiz da árvore, lista vazia que é uma FILA SAÍDA lista SE nó ≠ NIL ENTÃO lista = BUSCA-IN-ORDEM(ESQUERDA(nó), lista) INSERIR(CHAVE(nó), lista) //INSERE A CHAVE NA (NO FINAL DA) FILA lista = BUSCA-IN-ORDEM(DIREITA(nó), lista) FIM SE FIM ALGORITMO
  7. 7. 4. Escreva um algoritmo que concatene duas árvores AVL em uma árvore AVL válida. ALGORITMO CONCATENAR-AVL ENTRADA arv1, arv2 SAÍDA arv SE CHAVE(RAIZ(arv1)) > CHAVE(RAIZ(arv2)) ENTÃO troca(arv1,arv2) FIM SE nó = RAIZ(arv2) ENQUANTO ESQUERDA(nó) ≠ NIL FAÇA nó = ESQUERDA(nó) FIM ENQUANTO REMOVER(nó, arv2) RAIZ(arv) = nó ESQUERDA(nó) = RAIZ(arv1) DIREITA(nó) = RAIZ(arv2) BALANCE(nó) = ALTURA(ESQUERDA(nó)) – ALTURA(DIREITA(nó)) ENQUANTO absoluto(BALANCE(nó)) ≤ 1 FAÇA ROTACIONAR(nó) FIM ENQUANTO FIM ALGORITMO
  8. 8. 5. Escreva um algoritmo que construa um heap que contém todos os elementos de dois heaps de tamanho n. ALGORITMO UNIR-HEAPS ENTRADA heap1, heap2 SAÍDA heap nó = REMOVER(heap1) RAIZ(heap) = nó ESQUERDA(nó) = RAIZ(heap1), PAI(RAIZ(heap1)) = nó DIREITA(nó) = RAIZ(heap2), PAI(RAIZ(heap2)) = nó HEAPFY(nó) x = RAIZ(heap1), y = RAIZ(heap2) ENQUANTO x ≠ NIL E y ≠ NIL FAÇA PROXIMO(x) = y, ANTERIOR(y) = x, x = DIREITA(x), y = ESQUERDA(y) FIM ENQUANTO FIM ALGORITMO

×