使用前缀表示法构建表达式树

时间:2014-10-03 04:27:28

标签: c++ expression-trees

我正在开发一个使用C ++构建表达式树的项目。我在构建树时遇到了麻烦,因为我相信我在某些时候错误地增加了输入字符串。我的两个函数如下:

template <typename DataType>
void ExprTree<DataType>::build()
{
    char *input = new char[20];
    cin >> input;
    buildHelper(root, input);
}

上面的函数以前缀表示法从用户获取一个字符串作为输入,并将其传递给递归构建器函数以帮助构建树。

template <typename DataType>
void ExprTree<DataType>::buildHelper(ExprTreeNode *&node, char *input)
{
    if (*input != NULL)
    {
        node = new ExprTreeNode(*input, NULL, NULL);
        if ((*input) == '*' || (*input) == '+' || (*input) == '-' || (*input) == '/')
        {
            input++;
            buildHelper(node->left, input);
            input++;
            buildHelper(node->right, input);
        }
    }
}

上面的函数从前一个函数中获取字符串并尝试构建树。

我使用以下字符串作为测试用例:* + 13-64

我构建的树看起来像这样:

      1

*<
              3
      +<
              1

我相信我遇到了正确增加用户输入的问题,但我无法确定。任何帮助将不胜感激!谢谢。

编辑:

我也包含了ExprTreeNode函数:

template <typename DataType>
ExprTree<DataType>::ExprTreeNode::ExprTreeNode(char elem, ExprTreeNode *leftPtr, ExprTreeNode *rightPtr)
{
    dataItem = elem;
    left = leftPtr;
    right = rightPtr;
}

0 个答案:

没有答案