0

式ツリーを取得して値を計算する関数を作成しました。私のリーフノードはキーとして数字または文字ですが、値として整数を持っています。プログラムを実行すると、答えとして -74 が返されますが、これは正しくありません。エラーがどこにあるかの手がかりはありますか?

                    -
                  /   \
                 +     *
               /  \   /  \
              a   /   2   +
                 / \     / \
                *       e   3
               / \
              b   c



 class 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
4

0 に答える 0