Pesquisar na Comunidade
Mostrando resultados para as tags ''arvore binaria''.
Encontrado 3 registros
-
arvore binaria Arvore binaria com expressão numerica
uma questão postou Wagner da Silva Grupo de Estudos
Olá construí este código em arvore binaria mas, está dando erro , apenas preciso fazê-lo apresentar um resultado, que é o numeral 20. alguém poderia me ajudar. #include <stdio.h> typedef struct arv Arv; struct arv { char op; float valor; struct arv *esq, *dir; }; // Implementar esta função float avalia (Arv *a) { if ((a->esq == NULL) && (a->dir == NULL)) return a->valor; else{ if(a->op == ‘+’) return avalia(a->esq) + avalia(a->dir) if(a->op == ‘-’) return avalia(a->esq) - avalia(a->dir) if(a->op == ‘*’) return avalia(a->esq) * avalia(a->dir) if(a->op == ‘/’) return avalia(a->esq) / avalia(a->dir) } } int main(void) { // Árvore para representar a operação: 5 * 3= 15 Arv no[3]; // Em vetor Arv op, val1, val2; // Em variáveis // Vetor no[0].op = '*'; no[0].esq = &no[1]; no[0].dir = &no[2]; no[1].valor = 5; no[2].valor = 3; printf("Resultado da expressao: %.2f\n", avalia(&no[0])); // Variáveis op.op = '*'; op.esq = &val1; op.dir = &val2; val1.valor = 5; val2.valor = 3; printf("Resultado da expressao: %.2f\n", avalia(&op)); } -
Preciso fazer uma função que exclui os nós de uma árvore que são pares, tentei de várias formas porém o código está dando erro, gostaria de uma ajuda, se possível. Código da função remover que irei puxar dentro da função que estou fazendo (este está funcionando normalmente): int remove_ArvBin(ArvBin *raiz, int valor){ if(raiz == NULL) return 0; struct NO* ant = NULL; struct NO* atual = *raiz; while(atual != NULL){ if(valor == atual->info){ if(atual == *raiz) *raiz = remove_atual(atual); else{ if(ant->dir == atual) ant->dir = remove_atual(atual); else ant->esq = remove_atual(atual); } return 1; } ant = atual; if(valor > atual->info) atual = atual->dir; else atual = atual->esq; } return 0; } Função para remover os Pares: int excluiPar(ArvBin *raiz){ int info_atual, info_esquerda, info_direita; info_atual = (*raiz)->info; printf("%d\n", info_atual); if ((info_atual%2) == 0 ){ remove_ArvBin(raiz, info_atual); } if ((*raiz)->esq != NULL) { info_esquerda = ((*raiz)->info); if ((info_esquerda%2) == 0 ){ remove_ArvBin(raiz, info_esquerda); } } if ((*raiz)->dir != NULL) { info_direita = ((*raiz)->info); if ((info_direita%2) == 0 ){ remove_ArvBin(raiz, info_direita); } } } Quando rodo desta forma o sistema trava, tentei de outras formas também porém, não obtive sucesso. Tenho imensa dificuldade em estrutura de dados.
-
#include <stdlib.h> #include <stdio.h> #include <conio.h> #include <ctype.h> typedef struct No { int numero; struct No *pEsquerda; struct No *pDireita; } No; void criarArvore(No **pRaiz) { *pRaiz = NULL; } void inserir(No **pRaiz, int numero) { if(*pRaiz == NULL) { *pRaiz = (No *) malloc(sizeof(No)); (*pRaiz)->pEsquerda = NULL; (*pRaiz)->pDireita = NULL; (*pRaiz)->numero = numero; } else { if(numero < (*pRaiz)->numero) inserir(&(*pRaiz)->pEsquerda, numero); if(numero > (*pRaiz)->numero) inserir(&(*pRaiz)->pDireita, numero); } } int menu(){ int opcao; printf("\n\nO que deseja fazer? \n\n"); printf("0 - Sair\n"); printf("1 - Inserir Elementos\n"); scanf("%d", &opcao); return opcao; } int main(void){ int opcao; criarArvore(); do { opcao = menu(); switch (opcao) { case 0: break; case 1: inserir(); break; default: printf("\nOPCAO INVALIDA!"); } } while (opcao != 0); return 0; } Iniciei a implementação de inserção de elemento em árvore binária e, apresentou o seguinte erro: Linha Col. In function 'main': 49 2 [Error] too few arguments to function 'criarArvore' 13 6 [Note] declared here 56 2 [Error] too few arguments to function 'inserir' 18 6 [Note] declared here O que devo fazer?