Pré-visualização parcial do texto
Baixe arvore e outras Notas de estudo em PDF para Engenharia Telemática, somente na Docsity!
95/24/2018 arvore. Page 1/3 1 PRERELERELELELALELALELRAEALEALEARLALLLALELALALLALL DRA RA 2 * Instituto Federal de Educação Ciência e Tecnologia da Paraiba * 3 * Campus Campina Grande * 4 * Curso Superior de Tecnologia em Telemática * & * Disciplina: Programação e Estruturas de Dados * & & Professor: César Rocha * To * * & + Copyright 2818 - Cêsar Rocha Vasconcelos * q «+ Este material foi elaborado para ser utilizado pelos alunos da * 19 & disciplina Estruturas de Dados, do Curso Superior de Tecnologia * 11] + em Telemárica - IFPB/Campus Campina Grande. * 12 + * 13 + Nenhuma parte deste material pode ser reproduzida ou transmitida * 14 * de qualquer modo ou por qualquer meio sem prévia autorização do * 15 * autor e sem lhe ser dado o devido crédito. * 16 RARREREAEARLARALAALALAARARARAEASACAAAASALALALAARARASAEACACAARA AA RR 17 1ã include “arvore .h” 19 ginclude dio.h> 28 include 21 &) o Jf=====00nnannnanano non nana nana na no nn nnnnnanana nano nn nana nano 23 24 +! funções auxiliares que fatoram código comum às demais sub-rotinas... 25 no* aloca(); 2h 27 ff===eeconanaacaanacacacananenanaaacacananaaenananaoacanacaanaaaanananam 28 28 30 (/atesesesasasass Implementação do TAD Árvore Binária +2e+esaaata// 3 32 33 /* Inicializar uma árvore binária colocando-a num estado válido */ 34 void inicializar( TArvoreBin * arv 37 arv = NULL: & EE) 36 /* Verificar se uma árvore binária está ou não vazia 37 * Parâmetro: um ponteiro representando “a raiz” */ 38 int arvorevazia( TárvoreBin arv )( return arv == NULL; + 3g 49 4 Construir um novo nô para a árvore binária. 41 * Parâmetros: um número representando o campo de informação do nó 42 + Retorno: o endereço do nó recêm-criado &/ 43 nos constroi( int dado 5f 4d no* novo; 45 46 if € ( novo = aloca() ) == NULL 9 return NULL; 47 novo->dado = dado; 48 novo->esq = NULL; 49 novo-2dir = NULL: 5a return novo; 515 52 53 /* Criar um filho esquerdo na árvore mediante um “nó-pai” 54 * Parâmetro: um apontador para o nó-pai e um número representando 55 * o campo de informação do nó. 14:44:58 arvore.c Page 1/3 85/24/2018 arvore. c Page 2/3 56 * Retorno: 1 em caso de sucesso ou &, caso contrário. 57 + Note que a sub-rotina deve verificar ainda se o “nó-pai” não está nulo 58 * ou se já tem um filho esquerdo. Caso não tenha um filho esquerdo, 59 + será construido um novo nô a partir do “nô-pai” passado como parâmetro */ 50 int criarFilhoEsquerdo( TArvoreBin arv, int dado ) £ 51 mos novo; 52 63 tt! nô-pai é nulo? 64 1f Carv == NULL à return &; 55 66 tt! já possui um filho esquerdo? 57 if Carv-zesq != NULL 5 return O; 68 [E] if € ( novo = constroi( dado ) ) == NULL à return O 0 arv->esq F mn return 1; 7 3 73 74 4% Criar um filho direito na árvore mediante um “nô-pai" 75 + Parâmetro: um apontador para o nô-pai e um número representando 76 + o campo de informação do nó. 77 + Retorno: 1 em caso de sucesso ou &, caso contrário. 78 + Note que a sub-rotina deve verificar ainda se o “nó-pai” não está nulo 79 * ou se já tem um filho direito. Caso não tenha um filho direito, 8o + será construido um novo nô a partir do “nô-pai” passado com parâmetro */ 87 int criarFilhoDireito( TArvoreBin arv, int dado ) £ 82 mos novo; Ba 84 tt! nô-pai é nulo? 85 if Carv == NULL à return O; BG 87 tt! já possui um filho esquerdo? B& if Carv-zdir != NULL 5 return O; Ba Eli] if € ( novo = constroi( dado ) ) == NULL à return O mM arv->dir = novo; 32 return 1; 932 3 34 95 4/4 Acessar um filho esquerdo na árvore mediante um “nó-pai”. 96 + Parâmetro: um apontador para o nô-pai. 97 + Retorno: um apontador para o filho esquerdo. */ 98 nos filhoEsq( TArvoreBin arv )j€ return arv->esg; 3 EE 198 /* Acessar um filho direito na árvore mediante um “nô-pai”. 181 * Parâmetro: um apontador para o nó-pai. 192 | * Retorno: um apontador para o filho direito */ 183 no& filhoDir( TArvoreBin arv )€ return arv-zdir; 3 184 165 /* Buscar um determinado nô na árvore. 196 «+ Parâmetro: um apontador para a raiz e um dado a ser buscado 197 | + Retorno: 1 em caso de sucesso ou 8, se não encontrá-lo &/ 188 int pesquisaNodo( TArvoreBin arv, int dado ) É 189 if ( arvoreVazia( arv 3 ) return O; na 14:44:58 arvore.c Page 2/3 85/24/2018 arvore. c Page 3/3 m if C dado == arv->dado ) // estava na raiz? nz return 1; W3 else if ( pesquisaNodo ( filhoEsqlarv), dado ) 3 na return 1; ns else 16 return pesquisaNodo ( filhoDir(arv), dado ); NT + RE 119 /* Imprimir todos os nós de uma árvore. 128 + Aqui, será utilizado o percurso pré-ordem. 121 * Parâmetro: um apontador para a raiz da árvore &/ 122 void imprimirç TArvoreBin arv J( 123 if ( larvorevaziaçarv) ) € 124 printf( “xdit”, arv->dado ): // a raiz corrente 125 imprimir( filhoEsgqlarv) ); 126 imprimir( filhoDir(arv) ): 127 y 128 + 128 138 // alocar um novo nó na memória do computador 131 4/ função utilitária usada para fatorar código comum 132 no* aloca( void )€ return ( (nos) malloc( sizeofino) ) ): 1 14:44:58 arvore. c Page 3/3