1

我正在做我的任务,我必须修改我以前的任务(这是前缀表达式树,它接受表达式并给出结果)

+ OR
* AND
- NOT

现在我必须使它成为逻辑表达式树,它将执行 AND OR 和 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 回答