Enviar pesquisa
Carregar
Árvore Binária
•
0 gostou
•
281 visualizações
E
Elaine Cecília Gatto
Seguir
árvore binária em C
Leia menos
Leia mais
Educação
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 6
Baixar agora
Baixar para ler offline
Recomendados
Lista simplesmente encadeada
Lista simplesmente encadeada
Elaine Cecília Gatto
Lista duplamente encadeada
Lista duplamente encadeada
Elaine Cecília Gatto
Lista duplamente encadeada
Lista duplamente encadeada
Elaine Cecília Gatto
Lista simplesmente encadeada: Operações de buscar e atualizar
Lista simplesmente encadeada: Operações de buscar e atualizar
Elaine Cecília Gatto
Tabela Hash com Lista Encadeada
Tabela Hash com Lista Encadeada
Elaine Cecília Gatto
Hashing enderecamento aberto - operações
Hashing enderecamento aberto - operações
Elaine Cecília Gatto
Lista ligada simples
Lista ligada simples
ETEC Lauro Gomes
Lista duplamente encadeada dinamica
Lista duplamente encadeada dinamica
Elaine Cecília Gatto
Recomendados
Lista simplesmente encadeada
Lista simplesmente encadeada
Elaine Cecília Gatto
Lista duplamente encadeada
Lista duplamente encadeada
Elaine Cecília Gatto
Lista duplamente encadeada
Lista duplamente encadeada
Elaine Cecília Gatto
Lista simplesmente encadeada: Operações de buscar e atualizar
Lista simplesmente encadeada: Operações de buscar e atualizar
Elaine Cecília Gatto
Tabela Hash com Lista Encadeada
Tabela Hash com Lista Encadeada
Elaine Cecília Gatto
Hashing enderecamento aberto - operações
Hashing enderecamento aberto - operações
Elaine Cecília Gatto
Lista ligada simples
Lista ligada simples
ETEC Lauro Gomes
Lista duplamente encadeada dinamica
Lista duplamente encadeada dinamica
Elaine Cecília Gatto
Lista Encadeada Simples: Inserção no Final
Lista Encadeada Simples: Inserção no Final
Elaine Cecília Gatto
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1
Elaine Cecília Gatto
Arvore binária
Arvore binária
Elaine Cecília Gatto
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core Java
Elaine Cecília Gatto
Lista simplesmente encadeada dinamica
Lista simplesmente encadeada dinamica
Elaine Cecília Gatto
Lista Encadeada: Inserção no Início
Lista Encadeada: Inserção no Início
Elaine Cecília Gatto
Pilha dinâmica
Pilha dinâmica
Elaine Cecília Gatto
Fila circular dinamica
Fila circular dinamica
Elaine Cecília Gatto
Pilha em C
Pilha em C
Luiz Francisco Bozo
Árvore Binária em C
Árvore Binária em C
Luiz Francisco Bozo
Filas encadeadas
Filas encadeadas
Fabiana Lorenzi
Pilhas encadeadas
Pilhas encadeadas
Fabiana Lorenzi
Conhecendo ou relembrando C
Conhecendo ou relembrando C
Vinícius Hax
Hash Endereçamento Quadrático Operações
Hash Endereçamento Quadrático Operações
Elaine Cecília Gatto
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
Adriano Teixeira de Souza
Linguagem C - Strings
Linguagem C - Strings
Elaine Cecília Gatto
Java script para adultos
Java script para adultos
Diego Honorio
Lista duplamente encadeada dinâmica circular
Lista duplamente encadeada dinâmica circular
Elaine Cecília Gatto
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
Adriano Teixeira de Souza
Lista simplesmente encadeada dinâmica circular
Lista simplesmente encadeada dinâmica circular
Elaine Cecília Gatto
A influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etaria
Elaine Cecília Gatto
Inteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à Medicina
Elaine Cecília Gatto
Mais conteúdo relacionado
Mais procurados
Lista Encadeada Simples: Inserção no Final
Lista Encadeada Simples: Inserção no Final
Elaine Cecília Gatto
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1
Elaine Cecília Gatto
Arvore binária
Arvore binária
Elaine Cecília Gatto
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core Java
Elaine Cecília Gatto
Lista simplesmente encadeada dinamica
Lista simplesmente encadeada dinamica
Elaine Cecília Gatto
Lista Encadeada: Inserção no Início
Lista Encadeada: Inserção no Início
Elaine Cecília Gatto
Pilha dinâmica
Pilha dinâmica
Elaine Cecília Gatto
Fila circular dinamica
Fila circular dinamica
Elaine Cecília Gatto
Pilha em C
Pilha em C
Luiz Francisco Bozo
Árvore Binária em C
Árvore Binária em C
Luiz Francisco Bozo
Filas encadeadas
Filas encadeadas
Fabiana Lorenzi
Pilhas encadeadas
Pilhas encadeadas
Fabiana Lorenzi
Conhecendo ou relembrando C
Conhecendo ou relembrando C
Vinícius Hax
Hash Endereçamento Quadrático Operações
Hash Endereçamento Quadrático Operações
Elaine Cecília Gatto
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
Adriano Teixeira de Souza
Linguagem C - Strings
Linguagem C - Strings
Elaine Cecília Gatto
Java script para adultos
Java script para adultos
Diego Honorio
Lista duplamente encadeada dinâmica circular
Lista duplamente encadeada dinâmica circular
Elaine Cecília Gatto
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
Adriano Teixeira de Souza
Lista simplesmente encadeada dinâmica circular
Lista simplesmente encadeada dinâmica circular
Elaine Cecília Gatto
Mais procurados
(20)
Lista Encadeada Simples: Inserção no Final
Lista Encadeada Simples: Inserção no Final
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1
Arvore binária
Arvore binária
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core Java
Lista simplesmente encadeada dinamica
Lista simplesmente encadeada dinamica
Lista Encadeada: Inserção no Início
Lista Encadeada: Inserção no Início
Pilha dinâmica
Pilha dinâmica
Fila circular dinamica
Fila circular dinamica
Pilha em C
Pilha em C
Árvore Binária em C
Árvore Binária em C
Filas encadeadas
Filas encadeadas
Pilhas encadeadas
Pilhas encadeadas
Conhecendo ou relembrando C
Conhecendo ou relembrando C
Hash Endereçamento Quadrático Operações
Hash Endereçamento Quadrático Operações
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
Linguagem C - Strings
Linguagem C - Strings
Java script para adultos
Java script para adultos
Lista duplamente encadeada dinâmica circular
Lista duplamente encadeada dinâmica circular
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
Lista simplesmente encadeada dinâmica circular
Lista simplesmente encadeada dinâmica circular
Mais de Elaine Cecília Gatto
A influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etaria
Elaine Cecília Gatto
Inteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à Medicina
Elaine Cecília Gatto
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Elaine Cecília Gatto
Apresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPC
Elaine Cecília Gatto
entrevista r7.pdf
entrevista r7.pdf
Elaine Cecília Gatto
Como a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptx
Elaine Cecília Gatto
Empoderamento Feminino
Empoderamento Feminino
Elaine Cecília Gatto
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Elaine Cecília Gatto
Community Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCar
Elaine Cecília Gatto
Classificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de Correlações
Elaine Cecília Gatto
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
Elaine Cecília Gatto
Community Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label Classification
Elaine Cecília Gatto
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Elaine Cecília Gatto
Curtinhas de sábado.pdf
Curtinhas de sábado.pdf
Elaine Cecília Gatto
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Elaine Cecília Gatto
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
Elaine Cecília Gatto
Pipeline desdobramento escalonamento
Pipeline desdobramento escalonamento
Elaine Cecília Gatto
Cheat sheet Mips 32 bits
Cheat sheet Mips 32 bits
Elaine Cecília Gatto
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
Elaine Cecília Gatto
Como descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcação
Elaine Cecília Gatto
Mais de Elaine Cecília Gatto
(20)
A influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etaria
Inteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à Medicina
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Apresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPC
entrevista r7.pdf
entrevista r7.pdf
Como a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptx
Empoderamento Feminino
Empoderamento Feminino
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Community Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCar
Classificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de Correlações
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
Community Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label Classification
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Curtinhas de sábado.pdf
Curtinhas de sábado.pdf
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
Pipeline desdobramento escalonamento
Pipeline desdobramento escalonamento
Cheat sheet Mips 32 bits
Cheat sheet Mips 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
Como descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcação
Último
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
denisecompasso2
Expansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XV
lenapinto
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
MariaCristinaSouzaLe1
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Tutor de matemática Ícaro
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdf
Juliana Barbosa
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE atividade muito boa para
AndreaPassosMascaren
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União Europeia
Centro Jacques Delors
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
marlene54545
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
SileideDaSilvaNascim
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
comercial400681
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
marcelafinkler
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
JssicaCassiano2
AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022
LeandroSilva126216
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
PauloHenriqueGarciaM
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
azulassessoria9
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
PatriciaCaetano18
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubel
adrianaguedesbatista
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
azulassessoria9
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
Viviane Moreiras
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)
Centro Jacques Delors
Último
(20)
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
Expansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XV
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdf
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE atividade muito boa para
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União Europeia
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubel
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)
Árvore Binária
1.
1 #include <stdio.h> 2
#include <stdlib.h> 3 #include <locale.h> 4 5 struct No 6 { 7 int numero; 8 struct No *esquerda; 9 struct No *direita; 10 }; 11 typedef struct No No; 12 13 int n, tam; 14 15 int altura(No *pRaiz); 16 int maior(int a, int b); 17 int contarFolhas(No *pRaiz); 18 int contarNos(No *pRaiz); 19 void exibirPosOrdem(No *pRaiz); 20 void exibirPreOrdem(No *pRaiz); 21 void exibirEmOrdem(No *pRaiz); 22 void remover(No **pRaiz, int numero); 23 No *MenorEsquerda(No **no); 24 No *MaiorDireita(No **no); 25 void inserir(No **pRaiz, int numero); 26 void criarArvore(No **pRaiz); 27 int isInTree(No* pRaiz, int num); 28 No* libera(No* pRaiz); 29 30 int main() 31 { 32 tam=0; 33 setlocale(LC_ALL, "Portuguese"); 34 No *ARVORE = (No *) malloc(sizeof(No)); 35 if(!ARVORE) 36 { 37 printf("nSem memória disponível!n"); 38 exit(1); 39 } 40 else 41 { 42 criarArvore(ARVORE); 43 int opt; 44 45 do 46 { 47 system("cls"); 48 opt=menu(); 49 opcao(ARVORE,opt); 50 getchar(); 51 } 52 while(opt); 53 free(ARVORE); 54 return 0; 55 } 56 } 57 58 int menu(void) 59 { 60 int opt; 61 62 printf("nn============================================================n"); 63 printf(" Escolha a opcaon"); 64 printf(" 0. Sair n"); 65 printf(" 1. Zerar Árvore n"); 66 printf(" 2. Imprimir Arvore em Ordem n"); 67 printf(" 3. Imprimir Arvore em Pós-Ordem n"); 68 printf(" 4. Imprimir Arvore em Pré-Ordem n"); 69 printf(" 5. Inserir nó na Árvore n"); 70 printf(" 6. Remover Nó da Árvore n");; 71 printf(" 7. Buscar um Nó na Árvore n"); 72 printf(" 8. Atualizar um elemento de um NÓ da Árvore n"); 73 printf(" 9. Encontrar o MAIOR elemento à direita da Árvore.n"); 74 printf(" 10. Encontrar o MENOR elemento à esquerda da Árvore.n"); 75 printf(" 11. Encontrar o MAIOR elemento da Árvore.n"); 76 printf(" 12. Quantidade de NÓS da Árvore.n"); 77 printf(" 13. Quantidade de NÓS FOLHAS da Árvore.n"); 78 printf(" 14. Altura da Árvore.n"); 79 printf(" 15. Verificar se pertence à Árvore.n"); 80 printf("nnDigite a sua opcao: "); 81 scanf("%d", &opt); 82 printf("nn"); 83 84 return opt;
2.
85 } 86 87 void
opcao(No *ARVORE, int op) 88 { 89 No *tmp; 90 switch(op) 91 { 92 case 0: 93 libera(ARVORE); 94 printf("nÁrvore liberada com sucesso. Aperte qualquer tecla para sair!"); 95 getchar(); 96 break; 97 98 case 1: 99 libera(ARVORE); 100 criarArvore(ARVORE); 101 printf("Árvore Criada com Sucesso!"); 102 getchar(); 103 break; 104 105 case 2: 106 exibirEmOrdem(ARVORE); 107 getchar(); 108 break; 109 110 case 3: 111 exibirPreOrdem(ARVORE); 112 getchar(); 113 break; 114 115 case 4: 116 exibirPosOrdem(ARVORE); 117 getchar(); 118 break; 119 120 case 5: 121 printf("nDigite um valor inteiro: "); 122 scanf("%d%*c",&n); 123 inserir(&ARVORE, n); 124 getchar(); 125 break; 126 127 case 6: 128 if(vazia(ARVORE)) 129 { 130 printf("nA árvore está vazia! "); 131 } 132 else 133 { 134 printf("nDigite um valor inteiro: "); 135 scanf("%d%*c",&n); 136 remover(&ARVORE,n); 137 } 138 getchar(); 139 break; 140 141 case 7: 142 143 getchar(); 144 break; 145 146 case 8: 147 148 getchar(); 149 break; 150 151 case 9: 152 if(vazia(ARVORE)) 153 { 154 printf("nA árvore está vazia! "); 155 } 156 else 157 { 158 printf("nMenor DIREITA: %d", MenorEsquerda(&ARVORE)); 159 } 160 getchar(); 161 break; 162 163 case 10: 164 if(vazia(ARVORE)) 165 { 166 printf("nA árvore está vazia! "); 167 } 168 else
3.
169 { 170 printf("nMAIOR
DIREITA: %d", MaiorDireita(&ARVORE)); 171 } 172 getchar(); 173 break; 174 175 case 11: 176 if(vazia(ARVORE)) 177 { 178 printf("nA árvore está vazia! "); 179 } 180 else 181 { 182 183 } 184 getchar(); 185 break; 186 187 case 12: 188 if(vazia(ARVORE)) 189 { 190 printf("nA árvore está vazia! "); 191 } 192 else 193 { 194 printf("nQuantidade de Nós: %d", contarNos(ARVORE)); 195 } 196 getchar(); 197 break; 198 199 case 13: 200 if(vazia(ARVORE)) 201 { 202 printf("nA árvore está vazia! "); 203 } 204 else 205 { 206 printf("nCONTAR FOLHAS: %d", contarFolhas(ARVORE)); 207 } 208 getchar(); 209 break; 210 211 case 14: 212 if(vazia(ARVORE)) 213 { 214 printf("nA árvore está vazia! "); 215 } 216 else 217 { 218 printf("nALTURA DA ÁRVORE: %d", altura(ARVORE)); 219 } 220 getchar(); 221 break; 222 223 case 15: 224 if(vazia(ARVORE)) 225 { 226 printf("nA árvore está vazia! "); 227 } 228 else 229 { 230 printf("nDigite um valor inteiro: "); 231 scanf("%d%*c",&n); 232 printf("nEstá na Árvore: %d", isInTree(&ARVORE,n)); 233 } 234 getchar(); 235 break; 236 237 default: 238 printf("nComando inválido! n"); 239 } 240 } 241 242 243 int vazia(No *ARVORE) 244 { 245 return ARVORE==NULL; 246 } 247 248 void criarArvore(No **pRaiz) 249 { 250 *pRaiz = NULL; 251 } 252
4.
253 254 void inserir(No
**pRaiz, int numero) 255 { 256 if(*pRaiz == NULL) 257 { 258 *pRaiz = (No *) malloc(sizeof(No)); 259 (*pRaiz)->esquerda = NULL; 260 (*pRaiz)->direita = NULL; 261 (*pRaiz)->numero = numero; 262 printf("nNó %d inserido na raíz com sucesso",(*pRaiz)->numero ); 263 } 264 else 265 { 266 if(numero < (*pRaiz)->numero) 267 { 268 inserir(&(*pRaiz)->esquerda, numero); 269 printf("nNó %d inserido à esquerda com sucesso", (*pRaiz)->numero); 270 } 271 if(numero > (*pRaiz)->numero) 272 { 273 inserir(&(*pRaiz)->direita, numero); 274 printf("nNó %d inserido à direita com sucesso", (*pRaiz)->numero); 275 } 276 } 277 } 278 279 No *MaiorDireita(No **no) 280 { 281 if((*no)->direita != NULL) 282 return MaiorDireita(&(*no)->direita); 283 else 284 { 285 No *aux = *no; 286 if((*no)->esquerda != NULL) // se nao houver essa verificacao, esse nó vai perder todos os seus filhos da esquerda! 287 *no = (*no)->esquerda; 288 else 289 *no = NULL; 290 return aux; 291 } 292 } 293 294 No *MenorEsquerda(No **no) 295 { 296 if((*no)->esquerda != NULL) 297 return MenorEsquerda(&(*no)->esquerda); 298 else 299 { 300 No *aux = *no; 301 if((*no)->direita != NULL) // se nao houver essa verificacao, esse nó vai perder todos os seus filhos da direita! 302 *no = (*no)->direita; 303 else 304 *no = NULL; 305 return aux; 306 } 307 } 308 309 void remover(No **pRaiz, int numero) 310 { 311 if(*pRaiz == NULL) // esta verificacao serve para caso o numero nao exista na arvore. 312 { 313 printf("Numero nao existe na arvore!"); 314 getch(); 315 return; 316 } 317 if(numero < (*pRaiz)->numero) 318 remover(&(*pRaiz)->esquerda, numero); 319 else if(numero > (*pRaiz)->numero) 320 remover(&(*pRaiz)->direita, numero); 321 else // se nao eh menor nem maior, logo, eh o numero que estou procurando! :) 322 { 323 No *pAux = *pRaiz; // quem programar no Embarcadero vai ter que declarar o pAux no inicio do void! :[ 324 if (((*pRaiz)->esquerda == NULL) && ((*pRaiz)->direita == NULL)) // se nao houver filhos... 325 { 326 free(pAux); 327 (*pRaiz) = NULL; 328 } 329 else // so tem o filho da direita 330 { 331 if ((*pRaiz)->esquerda == NULL) 332 {
5.
333 (*pRaiz) =
(*pRaiz)->direita; 334 pAux->direita = NULL; 335 free(pAux); 336 pAux = NULL; 337 } 338 else //so tem filho da esquerda 339 { 340 if ((*pRaiz)->direita == NULL) 341 { 342 (*pRaiz) = (*pRaiz)->esquerda; 343 pAux->esquerda = NULL; 344 free(pAux); 345 pAux = NULL; 346 } 347 else //Escolhi fazer o maior filho direito da subarvore esquerda. 348 { 349 pAux = MaiorDireita(&(*pRaiz)->esquerda); //se vc quiser usar o Menor da esquerda, so o que mudaria seria isso: 350 pAux->esquerda = (*pRaiz)->esquerda; // pAux = MenorEsquerda(&(*pRaiz)->direita); 351 pAux->direita = (*pRaiz)->direita; 352 (*pRaiz)->esquerda = (*pRaiz)->direita = NULL; 353 free((*pRaiz)); 354 *pRaiz = pAux; 355 pAux = NULL; 356 } 357 } 358 } 359 } 360 } 361 362 void exibirEmOrdem(No *pRaiz) 363 { 364 if(pRaiz != NULL) 365 { 366 exibirEmOrdem(pRaiz->esquerda); 367 printf("%d | ", pRaiz->numero); 368 exibirEmOrdem(pRaiz->direita); 369 } 370 } 371 372 void exibirPreOrdem(No *pRaiz) 373 { 374 if(pRaiz != NULL) 375 { 376 printf("%d | ", pRaiz->numero); 377 exibirPreOrdem(pRaiz->esquerda); 378 exibirPreOrdem(pRaiz->direita); 379 } 380 } 381 382 void exibirPosOrdem(No *pRaiz) 383 { 384 if(pRaiz != NULL) 385 { 386 exibirPosOrdem(pRaiz->esquerda); 387 exibirPosOrdem(pRaiz->direita); 388 printf("%d | ", pRaiz->numero); 389 } 390 } 391 392 int contarNos(No *pRaiz) 393 { 394 if(pRaiz == NULL) 395 return 0; 396 else 397 return 1 + contarNos(pRaiz->esquerda) + contarNos(pRaiz->direita); 398 } 399 400 int contarFolhas(No *pRaiz) 401 { 402 if(pRaiz == NULL) 403 return 0; 404 if(pRaiz->esquerda == NULL && pRaiz->direita == NULL) 405 return 1; 406 return contarFolhas(pRaiz->esquerda) + contarFolhas(pRaiz->direita); 407 } 408 409 int maior(int a, int b) 410 { 411 if(a > b) 412 return a; 413 else 414 return b;
6.
415 }//maior 416 417 418 int
altura(No *pRaiz) 419 { 420 if((pRaiz == NULL) || (pRaiz->esquerda == NULL && pRaiz->direita == NULL)) 421 return 0; 422 else 423 return 1 + maior(altura(pRaiz->esquerda), altura(pRaiz->direita)); 424 } 425 426 /* Função que verifica se um elemento pertence ou não à árvore */ 427 int isInTree(No* pRaiz, int num) 428 { 429 if(vazia(&pRaiz)) /* Se a árvore estiver vazia, então retorna 0 */ 430 { 431 return 0; 432 } 433 434 /* O operador lógico || interrompe a busca quando o elemento for encontrado */ 435 return pRaiz->numero==num || isInTree(pRaiz->esquerda, num) || isInTree(pRaiz->direita, num); 436 } 437 438 No* libera(No* pRaiz) 439 { 440 if (!vazia(&pRaiz)) 441 { 442 libera(pRaiz->esquerda); /* libera sae */ 443 libera(pRaiz->direita); /* libera sad */ 444 free(pRaiz); /* libera raiz */ 445 } 446 return NULL; 447 } 448
Baixar agora