Вычисление дерева выражений рекурсивно

Я построил функцию, которая берет мое дерево выражений и вычисляет значения. Мои конечные узлы состоят из цифр или букв в качестве ключей, но имеют целые числа в качестве значений. Когда я запускаю программу, я получаю -74 в качестве ответа, что неверно. Любая подсказка, где ошибка?

                    -
/   \
+     *
/  \   /  \
a   /   2   +
/ \     / \
*       e   3
/ \
b   cclass bt
{public:

bt()
{
root = new tnode('-', 3, NULL);
root->left = new tnode('+', 5, root);
root->left->left = new tnode('a', 3, root->left);
root->left->right = new tnode('/', 5, root->left);
root->left->right->left = new tnode('*', 2, root->left->right);
root->left->right->right = new tnode('d', 11, root->left->right);
root->left->right->left->left = new tnode('b', 3, root->left->right->left);
root->left->right->left->right = new tnode('c', 7, root->left->right->left);
root->right = new tnode('*', 3, root);
root->right->left = new tnode('2', 6, root->right);
root->right->right = new tnode ('+', 1, root->right);
root->right->right->left = new tnode ('e', 10, root->right->right);
root->right->right->right = new tnode ('3', 3, root->right->right);
}
int calc(tnode *t)

{
if(t->left==NULL && t->right == NULL)
return t->value;
else
{
int answer = 0;
switch(t->key)
{
case '+':
answer = calc(t->left)+calc(t->right);
break;
case '-':
answer = calc(t->left)-calc(t->right);
break;
case '*':
answer = calc(t->left)*calc(t->right);
break;
case '/':
answer = calc(t->left)/calc(t->right);
break;
}
return answer;
}
}

И мой класс узла

#ifndef tnode_H
#define tnode_H
#include <iostream>
#include <string>

using namespace std;

class tnode
{
public:
tnode(char key, int value, tnode* p)
{
this->key = key;
this->value = value;
n = 1;
left = NULL;
right = NULL;
parent = p;
}tnode* left;
tnode* right;
tnode* parent;
char key;
int value;
int n;

};#endif

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector