我正在开发一个使用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;
}