Árvores Binárias Disciplina de Algoritmos e Estrutura de Dados III Prof. Marcos Antonio Schreiner 17/03/2015 1 Introdução ● ● Árvore binárias são estruturas importantes toda vez que uma decisão binária deve ser tomada em um algoritmo. O que é decisão binária? 2 Introdução ● Por exemplo: Dada uma sequencia de números verificar se existem ou não números duplicados. 1) Comparar cada novo número com todos os números já lidos. 2) Manter um vetor ordenado com os números lidos e fazer uma busca binária a cada número lido. 3) Outra solução é usar uma árvore binária para manter os números. 3 Árvore Binária - Definição Uma árvore binária T é um conjunto finito de nós com as propriedades: ● ● Ou o conjunto é vazio (T = ; ou O conjunto consiste em uma raiz r, e exatamente duas árvores binárias distintas T L e TR. – A árvore TL é chamada árvore da esquerda de T, – A árvore TR é chamada árvore da direita de T. Logo: 4 Árvore Binária - Exemplo 5 Árvores N-árias - Definição Uma árvore N-aria T é um conjunto finito de nós com as propriedades: ● ● Ou o conjunto é vazio, T= ; ou O conjunto consiste em uma raiz, R, e exatamente N árvores N-arias distintas. Os demais nós são repartidos em N 0 sub conjuntos, T0,T1, ..., TN-1, cada qual sendo uma árvore N-aria tal que: 6 Árvores Binárias - Definições ● ● ● Árvore binária quase completa é aquela que contém subárvores vazias no último ou no penúltimo nível da árvore. Árvore binária completa é aquela que contém subárvores vazias apena no último nível da árvore. Árvore binária zigue-zague é aquela que tem altura igual ao número de seus nós. 7 Árvores Binárias - Definições ● ● ● ● Uma árvore estritamente binária não contém nós com apenas um filho. O número de subárvores vazias em uma árvore estritamente binária com n > 0 nós é (n+1)/2. Se uma árvore completa que contém m nós no nível l ela conterá 2m nós no nível l+1. Cada nível l contém 2l-1 nós. 8 Árvores Binárias - Definições ● ● ● Uma árvore binária completa com n > 0 nós possui uma altura h = lg(n+1) ou h = lg(n+1)-1. Uma árvore estritamente binária com m folhas tem 2m-1 nós. Uma árvore binária quase completa com n nós é estritamente binária sse n for impar. 9 Árvores Binárias – Operações ● Seja p um ponteiro para um nó de uma árvore binária. – esquerda(p): retorna o ponteiro para o filho esquerdo de p; – direita(p): retorna o ponteiro para o filho direito de p; – pai(p): retorna o ponteiro para o pai de p; – irmao(p): retorna o ponteiro para o irmão de p; – criarArvore(x): cria uma nova árvore binária apenas com a raiz, que contém a informação x. – criaEsquerda(p, x): cria o filho esquerdo de p; – criaDireito(p, x): cria o filho direito de p; 10 Exemplo da Introdução Dada uma sequencia de números verificar se existem ou não números duplicados. 11 Solução do Exemplo da Introdução 1) O primeiro número lido é colocado na raiz da árvore. 2) Cada novo número lido é comparado com o elemento raiz: 1) Se é igual é descartado. 2) Se é menor repetimos o processo 2 com a árvore da direita; 3) Se maior repetimos o processo 2 com a árvore da esquerda. 4) O processo continua até que uma duplicata é encontrada ou 5) uma árvore vazia é achada. 1) Os menores são inseridos a direita; 2) Os maiores são inseridos a esquerda. Qual a complexidade temporal? 12 Percurso em Árvore Binária O percurso pode ser: ● ● Em Profundidade: – Percurso pré-ordem (pré-fixa): a raiz é visitada antes; – Percurso em ordem (in-fixa): a raiz é visitada na ordem, entre as subárvores; – Percurso em pós-ordem (pós-fixa): a raiz é visitada depois. Em Largura. 13 Percurso em Profundidade Percurso em-ordem (in-fixa): – – – Percorra em ordem a subárvore da esquerda; Visite/processe a raiz; Percorra em ordem a subárvore da direita 14 Implementação de árvores binárias Esta árvore binária tem altura h e número n de nós. n = 2h - 1 = 24 - 1 = 15 1 2 3 i 15 Implementação de árvores binárias ● ● Se um nó está na posição i, seu pai está na posição (i-1)/2 se i > 0; O filho esquerdo de i está na posição: – – ● 2i+1 se 2*i < n; Caso contrário este filho não existe. O filho direito de i está na posição: – 2*i + 2 se 2*i+2 < n; – Caso contrário este filho não existe. 16 Implementação de árvores binárias ● ● Os nós das árvores binárias podem ser representados da forma O que pode ser acrescentado nesta representação? 17 Implementação de árvores binárias 18 Exercícios 1) Implemente um TAD Árvore binária de inteiros e de string. 2) Use TAD Árvore binária de inteiros para implementar a solução do exemplo apresentado em sala. 3) Use TAD Árvore binária de string para implementar um interpretador de expressões matemáticas simples. OBS: Utilize o analisador léxico, sintático e o interpretador desenvolvidos na disciplina de Algoritmos e Estrutura de Dados II. 19 Representação de Árvores por Árvores Binárias Se uma árvore possui um ordem muito grande O número de árvores vazias inviabiliza a estrutura de dados. 20 Representação de Árvores por Árvores Binárias 1) Se reproduz a raiz da árvore original para a raiz da árvore binária equivalente; 2) Para cada nó da árvore original: 1) O filho mais a esquerda X na árvore original é o filho mais a esquerda da árvore binária. 2) Os irmão de X são descendentes do lado direito de X 21 Representação formal de Árvores por Árvores Binárias Seja T uma árvore e B(T) a árvore binária correspondente e B(T) possui um nó B(v) para cada nó v de T. As raízes de B(T) e T coincidem. ● ● O filho esquerdo de B(v) corresponde ao primeiro filho de v, caso exista. O filho direito de B(v) corresponde ao irmão de v localizado imediatamente à sua direita, caso exista. 22 Representação de Árvores por Árvores Binárias ● ● ● O percurso pré-fixo da árvore original coincide com o percurso pré-fixo da árvore binária. O percurso pós-fixo na árvore original coincide com o percurso in-fixo na árvore binária. O percurso in-fixo não tem sentido senão em árvores binárias e, portanto, não existe na árvore original. 23 Representação de Árvores por Árvores Binárias 24 Representação de Árvores por Árvores Binárias 25 Exercícios 1)Representar as seguintes árvores com árvores binárias: 1) 2) 3) 4) (A (B) (C) (D (E)) (F)); (G (H (I) (J)) (K) (L (M))); (A (B (C (H (I) (J (M)) (L)) (D)) (E (N)(O)) (F (G))); (A (B (G) (H) (I) (L (M))) (C (N)) (D (E)) (F (O) (P))); 2) Comprove a equivalência entre as árvores fazendo o percurso pré-ordem em-ordem e pós-ordem. 26 Referências SZWARCFITER, J. L., MARKENZON, L. Estruturas de Dados e seus Algoritmos. 3a ed. Rio de Janeiro: LTC, 2010. TENENBAUM, A. M., LANGSAM, Y., AUGENSTEIN, M. J. Estruturas de Dados Usando C. São Paulo: Makron, 1995. LEISERSON, C. E., RIVEST, R. L., CORMEN, T. H., STEIN, C. Algoritmos – Teoria e prática. Rio de Janeiro: Campus, 2002. 2