Prévia do material em texto
Estruturas de Dados Aula 08. Percurso em Árvores Karina Mochetti 2018.1 Karina Mochetti Aula 08. Percurso em Árvores Relembrando... Árvores Raiz e Folha Árvore Binária Registro de Árvore em C Número de nós e altura Karina Mochetti Aula 08. Percurso em Árvores Relembrando... Árvores Raiz e Folha Árvore Binária Registro de Árvore em C Número de nós e altura Karina Mochetti Aula 08. Percurso em Árvores Relembrando... Árvores Raiz e Folha Árvore Binária Registro de Árvore em C Número de nós e altura Karina Mochetti Aula 08. Percurso em Árvores Relembrando... Árvores Raiz e Folha Árvore Binária Registro de Árvore em C Número de nós e altura Karina Mochetti Aula 08. Percurso em Árvores Relembrando... Árvores Raiz e Folha Árvore Binária Registro de Árvore em C Número de nós e altura Karina Mochetti Aula 08. Percurso em Árvores Exercício Aula Passada Faça um programa que, dado dois nós x e y de uma árvore binária, retorna 0 se x é pai de y, 1 se y é pai de x e -1 se eles não relacionados. int TreeRelation(No* x, No* y) { if (x != NULL && (x->esq == y || x->dir == y)) return 0; else if (y != NULL && (y->esq == x || y->dir == x)) return 1; else return -1; } Karina Mochetti Aula 08. Percurso em Árvores Árvores Uma árvore é uma representação de dados de forma hierárquica. Karina Mochetti Aula 08. Percurso em Árvores Árvore Binária Uma Árvore Binária T é um conjunto finito de nós tal que: T é vazia; T consiste de um nó raiz e duas subárvores binárias Te e Td. Karina Mochetti Aula 08. Percurso em Árvores Árvore Binária typedef struct no { int info; struct no *esq; struct no *dir; } No; typedef No* ArvoreBin; Karina Mochetti Aula 08. Percurso em Árvores Percurso Um percurso é uma operação que percorre cada elemento da árvore somente uma vez, gerando uma ordenação. Como árvores binárias são uma estrutura não linear, o percurso nelas exige um algoritmo mais complexo. A estrutura recursiva de uma árvore favorece para algoritmos de percursos recursivos. Na recursão de uma árvore o caso base sempre será ou a árvore vazia, ou a árvore trivial. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. void PreOrdem (No* n) { if (n != NULL) { printf("%d", n->info); PreOrdem(n->esq); PreOrdem(n->dir); } return; } Complexidade O(n) Karina Mochetti Aula 08. Percurso em Árvores Percurso Pré-Ordem O percurso pré-ordem sempre visita a raiz antes de visitar os filhos. void PreOrdem (No* n) { if (n != NULL) { printf("%d", n->info); PreOrdem(n->esq); PreOrdem(n->dir); } return; } Complexidade O(n) Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. void PosOrdem (No* n) { if (n != NULL) { PosOrdem(n->esq); PosOrdem(n->dir); printf("%d", n->info); } return; } Complexidade O(n) Karina Mochetti Aula 08. Percurso em Árvores Percurso Pós-Ordem O percurso pós-ordem sempre visita os filhos antes de visitar a raiz. void PosOrdem (No* n) { if (n != NULL) { PosOrdem(n->esq); PosOrdem(n->dir); printf("%d", n->info); } return; } Complexidade O(n) Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina MochettiAula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. void InOrdem (No* n) { if (n != NULL) { InOrdem(n->esq); printf("%d", n->info); InOrdem(n->dir); } return; } Complexidade O(n) Karina Mochetti Aula 08. Percurso em Árvores Percurso In-Ordem O percurso in-ordem sempre visita o filhos esquerdo antes da raiz e o filho direito depois da raiz. void InOrdem (No* n) { if (n != NULL) { InOrdem(n->esq); printf("%d", n->info); InOrdem(n->dir); } return; } Complexidade O(n) Karina Mochetti Aula 08. Percurso em Árvores Percurso em Largura Realiza o percurso através dos níveis da árvore. Karina Mochetti Aula 08. Percurso em Árvores Percurso em Largura Realiza o percurso através dos níveis da árvore. Karina Mochetti Aula 08. Percurso em Árvores Percurso em Largura Realiza o percurso através dos níveis da árvore. Karina Mochetti Aula 08. Percurso em Árvores Percurso em Largura Realiza o percurso através dos níveis da árvore. Karina Mochetti Aula 08. Percurso em Árvores Percurso em Largura Realiza o percurso através dos níveis da árvore. Karina Mochetti Aula 08. Percurso em Árvores Percurso em Largura Realiza o percurso através dos níveis da árvore. Karina Mochetti Aula 08. Percurso em Árvores Percurso em Largura Realiza o percurso através dos níveis da árvore. Karina Mochetti Aula 08. Percurso em Árvores Percurso em Largura Realiza o percurso através dos níveis da árvore. Karina Mochetti Aula 08. Percurso em Árvores Percurso em Largura Realiza o percurso através dos níveis da árvore. Karina Mochetti Aula 08. Percurso em Árvores Percurso em Largura Realiza o percurso através dos níveis da árvore. Karina Mochetti Aula 08. Percurso em Árvores Percurso em Largura Realiza o percurso através dos níveis da árvore. Karina Mochetti Aula 08. Percurso em Árvores Percurso em Largura Realiza o percurso através dos níveis da árvore. void Largura (No *n) { Fila f = InicializaFila(); Push(f, n); while (!FilaVazia(f)) { No *p = Pop(f); if (p != NULL) { printf("%d", p->info); Push(f, p->esq); Push(f, p->dir); } } return; } Complexidade O(n) Karina Mochetti Aula 08. Percurso em Árvores Percurso em Largura Realiza o percurso através dos níveis da árvore. void Largura (No *n) { Fila f = InicializaFila(); Push(f, n); while (!FilaVazia(f)) { No *p = Pop(f); if (p != NULL) { printf("%d", p->info); Push(f, p->esq); Push(f, p->dir); } } return; } Complexidade O(n) Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08.Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Uma árvore binária pode representar uma expressão aritmética, onde toda folha possui um valor e cada nó realiza uma operação entre seus filhos. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética In-Ordem A notação infixa é a mais comum utilizada e precisa de parênteses para determinar a ordem dos operadores. É utilizada em linguagens de programação e calculadoras comuns. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Pré-Ordem A notação préfixa ou polonesa é muito útil, pois determina a ordem das operações sem a necessidade de parênteses Foi criada em 1920 pelo matemático polonês Jan Lukasiewicz. Karina Mochetti Aula 08. Percurso em Árvores Exemplo: Árvore de Expressão Aritmética Pós-Ordem A notação pósfixa ou polonesa necessita de zero de memória para realizar o cálculo, além de não precisar de parênteses. Foi popularizada pela HP que a utiliza nas suas calculadoras. Karina Mochetti Aula 08. Percurso em Árvores Exercício Modifique os percursos adicionando a operação raiz quadrada à árvore de expressão aritmética. Quais as principais diferenças entre a árvore antiga e a nova? Karina Mochetti Aula 08. Percurso em Árvores