Построение дерева выражений с использованием префиксной нотации

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

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector