Ir para conteúdo
Fórum Script Brasil
  • 0

Arvore binaria com expressão numerica


Wagner da Silva

Pergunta

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));
}

 

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Pra quem queira  saber o resultado desse código, está aqui.

Elabore um programa em linguagem C que faça a leitura da árvore binária abaixo, executando as expressões aritméticas e imprimindo na tela o resultado do cálculo efetuado. O resultado retornado pela expressão definida na árvore abaixo é o valor 20.

#include <stdio.h>

typedef struct ARVORE {
    char operador;
    float valor;
    struct ARVORE *esquerda;
    struct ARVORE *direita;
} arvore;


float avalia(arvore *a)
{
    float x,y,res;

    // Se os ramos esquerdo e direito forem terminais, então o nodo contém um valor
    // Retornar esse valor
    if (a->esquerda == NULL && a->direita == NULL) {
        return a->valor;
    }
    else {
       

 // Senão, isto é, se os ramos esquerdo e direito não forem terminais, então o nodo contém um operador
        // Retornar recursivamente o resultado da operação requerida pelo nodo

        x = avalia(a->esquerda);
        y = avalia(a->direita);
        switch (a->operador) {
            case '+': res = x + y; break;
            case '-': res = x - y; break;
            case '*': res = x * y; break;
            case '/': res = x / y; break;
        }
        return res;
    }
}

int main()
{
    arvore nodo[9] = {
                        {'+',0,&nodo[1],&nodo[2]},
                        {'*',0,&nodo[3],&nodo[4]},    
                        {' ',5,NULL,NULL},            
                        {'-',0,&nodo[5],&nodo[6]},
                        {'+',0,&nodo[7],&nodo[8]},
                        {' ',6,NULL,NULL},
                        {' ',3,NULL,NULL},
                        {' ',4,NULL,NULL},
                        {' ',1,NULL,NULL}
                     };
    
    float resultado;
    resultado = avalia(&nodo[0]);
    printf("Resultado = %2.0f\n",resultado);
}
 

 

QUE_33524_138964_1.jpg

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...