INF00 Lista de Exercícios 2 Árvores. Construir algoritmo para dada uma árvore n-ária, transformá-la em uma árvore binária. 2. Qual a maior e menor quantidade de nós que podem existir em uma árvore binária completa de altura h? 3. Represente a sequência abaixo na forma de árvores binárias de alturas mínima e máxima. s = { 3,, 9, 2, 4, 6, 7, } 4. Escrever uma rotina em C para buscar a informação em um nó de uma árvore binária de busca, sendo dada a sua chave. Cuide para que a rotina seja eficiente.. Achar o maior elemento (campo numérico) de uma árvore binária dada. 6. Uma árvore binária é zig-zag quando é vazia ou quando não possui nós cheios. Sem usar recursividade, escreva, em C, uma função que recebe o endereço do nó raiz de uma árvore binária e verifica se ela é zig-zag. Se a árvore dada for zig-zag, a função deverá retornar sua altura; caso contrário, deverá retornar. Não utilize estruturas de dados auxiliares (pilhas, filas, etc...); apenas variáveis locais dos tipos ponteiro ou inteiro. 7. Uma árvore binária cuja altura é igual ao número de nós pode possuir nós cheios? Justifique. 8. Desenhe uma árvore estritamente binária com 7 nós para a qual os percursos em pré-ordem e inordem produzem a mesma sequência de visitas. 9. Toda árvore binária cheia é completa. 0. Dados os percursos abaixo, reconstruir a árvore original: pré-ordem:, 2, 3, 6, 8, 4, 9, 0, 2,,, 7, I simétrica (in-ordem) : 6, 3, 8, 2, 4, 9, 2, 0,,, I, 7,. Escrever rotina em pseudo-código e em C para percorrer uma árvore binária qualquer, em nível, das folhas para a raiz. Indique a complexidade do algoritmo. 2. Responda Certo ou Errado, justificando. a. Qualquer que seja o número de chaves, é sempre possível construir com elas uma árvore binária completa. b. Qualquer que seja o número de chaves, é sempre possível construir com elas uma árvore binária cheia. c. Uma árvore binária que possui as folhas no último ou penúltimo níveis é completa. d. Dada uma árvore binária com mais de 3 nós, é possível que um percurso em pre-ordem e um percurso em ordem simétrica visitem os nós na mesma ordem?
3. Utilizando uma árvore binária para representar uma expressão aritmética. a. Represente, em uma árvore binária, a seguinte expressão aritmética, respeitando a precedência usual dos operadores: 2 * ( 3) + (2 + 6) / 4. As folhas devem corresponder aos operandos e os nós interiores aos operadores. Não represente os parênteses. b. Defina, em C, a estrutura do nó da árvore binária utilizada para representar expressões. Assuma que os operandos são inteiros positivos e que apenas os operadores binários +, -, * e / são aceitos. A estrutura deve possuir o menor número possível de campos. c. Escreva em C uma função recursiva que recebe como parâmetro o endereço do nó raiz de uma árvore binária representando uma expressão e retorna como resultado o valor obtido na avaliação da expressão. Utilize a estrutura do nó definida no item c. d. Qual o percurso implementado pela função escrita no item anterior? O que realiza o procedimento de visita? 4. Escreva, em C, uma função recursiva que permuta as subárvores esquerda e direita de todos os nós de uma árvore binária. A função deve receber como parâmetro o endereço do nó raiz da subárvore a ser processada. Explicite também a chamada externa.. Verificar se as árvores abaixo são binárias de busca a) 2 b) 2 3 0 3 30 4 6 6 c) 0 20 3 7 22 4 2 2
AVL e Rubro Negra 6. A complexidade da busca em uma árvore binária AVL é O(log n)? e em uma ABB é O(log n)? 7. Considere a árvore AVL a seguir: 3 30 0 20 46 6 40 48 Realize, na árvore dada, a inserção das chaves 6, 70, 38, 44, 49 e 42, atualizando o fator de equilíbrio dos nós a cada inserção. Quando necessário, indique o nó desregulado e a rotação utilizada para regulá-lo. Redesenhe a árvore a cada passo. 8. Qual o número máximo e mínimo de nós em uma árvore AVL de altura h? 9. Escrever algoritmo para verificar se a árvore passada como parâmetro é balanceada. Retorne a altura da árvore. 20. Inserir as chaves 9, 8, 7, 6,, 2, 3, 4, em uma árvore AVL desenhando a árvore após cada inserção. Exclua as chaves 6 e 8, desenhando a árvore após cada inserção e exclusão. 2. Inserir as chaves 9, 8, 7, 6,, 2, 3, 4, em uma árvore Rubro Negra desenhando a árvore após cada inserção. Exclua as chaves 6 e 8, desenhando a árvore após cada inserção e exclusão. 22. Sem utilizar estruturas auxiliares (pilhas, filas,...) escreva em C uma função não recursiva para determinar a altura de uma árvore AVL, visitando o menor número de nós possível. Use a estrutura: typedef struct no t_no; struct no { int chave; int bal; /* fator de balanço: hdir - hesq */ t_no *esq, *dir; }; t_no *raiz; A função deve receber como parâmetro o endereço do nó raiz da árvore e retornar o valor da altura. 23. Apresente duas maneiras distintas de inserir as chaves 0, 20, 30, 40 e 0 em uma árvore AVL inicialmente vazia de modo que só ocorram exatamente 2 rotações duplas no mesmo sentido. Justifique sua resposta, realizando as inserções. 24. Considere uma árvore rubro-negra formada pela inserção de n nós com a operação Inserir. Argumente que se n >, a árvore terá pelo menos um nó VERMELHO. 3
Árvore B 2. Seja uma árvore B de ordem d = 3 e altura h = 3. Qual o número máximo de chaves na árvore? E o numero mínimo? Justifique. 26. Inserir em uma árvore B de ordem 2 vazia, as chaves { 0, 90, 70, 0, 80, 30, 00, 20, 30, 40, 70, 60 } na ordem. Remova sucessivamente da árvore B a menor chave do nó raiz até que a árvore fique vazia. Quando houver possibilidade de optar entre a chave sucessora ou predecessora imediata, opte sempre pela predecessora. Indique as ocorrências de redistribuição ou concatenação. 27. Considere a árvore B de ordem 2 abaixo: 09 80 2 90 4 6 77 8 00 2 22 33 3 40 89 200 20 220 230 Realize as seguintes operações, utilizando sempre a árvore resultante da operação anterior. Redesenhe a árvore a cada passo, indicando os nós que sofrem modificações, bem como a ocorrência de CISÃO, REDISTRIBUIÇÃO ou CONCATENAÇÃO: a) inserção de 0; b) remoção de 89; c) remoção de 80; d) inserção de 6; e) inserção de 66; f) remoção de 09. Use o mesmo critério para remoção dos nós. 28. Descreva as diferenças entre as árvores B e B+, ressaltando: Quantidade de chaves, localização dos dados, número de acessos e diferença entre nós internos e folhas. 29. Responda. a. A que condições deve satisfazer uma árvore B de ordem d para que a inserção de qualquer chave ocasione o aumento da altura da árvore? b. A que condições deve satisfazer uma árvore B de ordem d para que a remoção de qualquer chave ocasione a redução da altura da árvore? c. Por que a redistribuição deve ser tentada antes da concatenação durante a remoção de uma chave situada em um nó com ocupação mínima de uma árvore B? d. Se uma chave não está situada em uma folha de uma árvore B, o que garante que sua sucessora imediata, se existir, estará obrigatoriamente localizada em uma folha? e. Qual é o pior caso do algoritmo de inserção de uma chave em uma árvore B de ordem d? Como deve ser a árvore? 30. Para uma árvore B de ordem d > 0 e altura h > 0, calcule em função de d e h: a. O número mínimo de chaves que ela pode possuir (n MIN ). b. O número máximo de chaves que ela pode possuir (n MAX ). 4
Grafos 3. Desenhe um grafo com 0 vértices e 0 arestas com ciclos. Rotule os vértices e descreva os algoritmos a serem utilizados para realizar uma busca em profundidade e em amplitude. Inclua nos algoritmos uma visita aos nós e descreva que nós foram visitados por cada algoritmo. 32. Percorrer árvore em nível (sugestão: use uma fila como estrutura auxiliar). B A C Fila: A B,C D,E,F,G H, I, J K D E F G H I J K 33. Dado o grafo não direcionado e ponderado ilustrado abaixo, mostre como seria sua representação por matriz de adjacências e mostre também, passo a passo, o algoritmo de Kruskal para cálculo da árvore geradora mínima. Em cada passo do algoritmo mostre como ficaria a partição dinâmica dos nós utilizando a notação de conjuntos (ex.:{ {a,c}, {b,e,f}, {d}} ). 34. Usando o grafo abaixo descrito por uma lista de adjacências, faça: a) A representação do menor caminho (Dijkstra) partindo no vértice. b) A árvore geradora (spanning tree) de custo mínimo (Kruskal).