Я работаю над проектом, использующим 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;
}
Задача ещё не решена.