Вы можете разобрать дерево в древовидную структуру данных. Каждый узел в дереве имеет несколько дочерних узлов. Узел может быть либо листом (который является узлом без дочерних элементов), например, переменной x5
, либо узлом (с дочерними узлами), который представляет «математическую» функцию.
Дерево из вашего первого примера может выглядеть следующим образом.
Root [NODE]: child_of_root
* 4
Child_of_ Root [УЗЕЛ]: 1_child_of_child_of_root
+ 2_child_of_child_of_root
1_Child_of_Child_of_ Root [LEAF]: x5
2_Child_of_Child_of_ Root [NODE]: child_of_2_child_of_child_of_root * 2
Child_of_2_Child_of_Child_of_ Root [LEAF]: y8
Для анализа вашей входной строки в древовидная структура, которую вы должны проанализировать, как задаются (
и )
и если вы «умножаете» их на коэффициент, а если вы добавляете другие вещи - (x5 "+" (y8) "*" 2)
. Это может быть довольно сложно. (Может быть, вы могли бы использовать стеки? Однако я уверен, что там есть учебники).
После того, как вы создали свое древовидное представление ввода, вычислить выходную строку относительно просто. Создайте рекурсивный алгоритм, подобный следующему:
String getReult() {
if(this == NODE) {
return calculate(MY_NODE_CHILDREN.getResult());
}else if(this == LEAF) {
return VARIABLE;
}
}
Это псевдокод!
Функция вычисления должна добавить результаты дочерней строки, умножить их на коэффициент или ничего не делать, в зависимости от контекста.
Если вы вызываете свою рекурсивную функцию в root, должен появиться правильный результат.