1

以前のタスク(式を受け取り、結果を与えるプレフィックス式ツリー)を変更する必要がある割り当てを行っています

+ OR
* AND
- NOT

ここで、ANDORおよびNOT演算を実行する論理式ツリーにする必要があります。

char input;
    cin.get(input);

    if((input == '+')||(input == '-')||(input == '*'))
        {
        p = new ExprTreeNode(input,NULL,NULL);
         buildSub(p->left);
         buildSub(p->right);
      }
      else if(isdigit(input))
        {     //create a new node
            p = new ExprTreeNode(input,NULL,NULL);
        }
        else
      {
        cout <<" invalid expression exiting..." <<endl;
         exit (1);
       }

上記のコードは式を読み取り、再帰を使用してツリーを作成します。

単項演算子を追加する方法がわかりません...その後、式を評価する必要があります

int answer;
    switch (p->dataItem){

        case '*':
            // AND
        case'+':
            // OR

        case '-':
            // Reverse

        default:
            answer = (p->dataItem-'0');
            break;
    }
    return answer;

pはExprTreeNodeです

// Data members
        char dataItem;          // Expression tree data item
        ExprTreeNode *left,     // Pointer to the left child
                     *right;    // Pointer to the right child
4

1 に答える 1

2

私はあなたが次のことをしたいと思います:

if ((input == '+') || (input == '*'))
{
  p = new ExprTreeNode(input,NULL,NULL);
  buildSub(p->left);
  buildSub(p->right);
}
else if (input == '-')
{
  p = new ExprTreeNode(input, NULL, NULL);
  buildSub(p->left);
}
else if(isdigit(input))
{     //create a new node
  p = new ExprTreeNode(input,NULL,NULL);
}
else
{
  cout <<" invalid expression exiting..." <<endl;
  exit (1);
}

編集: 次に、評価ルーチンは次のように機能します。

bool ExprTreeNode::evaluate() {
  switch (dataItem) {
    case '+':
      return left->evaluate() || right->evaluate();
    case '*':
      return left->evaluate() && right->evaluate();
    case '-':
      return !left->evaluate();
    case '0':
      return false;
    default:
      return true;
  }
}
于 2012-11-09T10:37:44.927 に答える