Я видел подходы к тому, как итерации через двоичные деревья и найти сумму всех узлов, за исключением того, что я оцениваю входы выражений для калькулятора. Узлы расположены в правильном порядке в соответствии с порядком операций, а узлы - либо operators
, либо operands
. Я думаю, что recursion
медленнее, чем итерация для этого, поэтому я хотел выяснить, как пройти через двоичное дерево и найти результат выражения, введенного без recursion
.Калькулятор Алгоритм - использование итерации вместо рекурсии в двоичном дереве поиска
Пример дерева:
+
* /
3 4 4 2
Рекурсивный метод, который я до сих пор (я использовал перечисление для оператора):
public static float evaluate(BETNode root)
{
if (root == null)
{
throw new IllegalArgumentException("Error: Root is null!");
}
if (root.getType() == BETNodeType.OPERAND)
{
return root.getOperand();
}
float leftValue = evaluate(root.getLeft());
float rightValue = evaluate(root.getRight());
switch (root.getOperator())
{
case '+':
return leftValue + rightValue;
case '-':
return leftValue - rightValue;
case '*':
return leftValue * rightValue;
case '/':
return leftValue/rightValue;
}
throw new IllegalArgumentException("Error.");
}