Решение бинарного дерева - PullRequest
0 голосов
/ 29 ноября 2011

Может кто-нибудь объяснить, как я решаю дерево выражений, когда мне дают x в качестве параметра?

Например, у меня есть уравнение ((2 * x)) + 4 и, скажем, в параметре x = 3. Это даст нам 10, а метод вернет это.

Я думал о том, чтобы сделать это рекурсивно, но я не могу этого сделать, потому что параметр должен быть двойным x.

Есть мысли?

Вот код, который у меня есть.

  public double evaluate(double x) throws ExpressionTreeNodeException {
    ExpressionTreeNode n = new ExpressionTreeNode();
    n.setValue(getValue());
    n.setType(getType());
    if ( n.getRightChild() == null && n.getLeftChild() == null){
        double RootLeaf = Double.parseDouble(n.getValue());
        return RootLeaf;
    } else {
        double operand1 = 
        return ()
    }
}

1 Ответ

1 голос
/ 29 ноября 2011

Не могли бы вы просто сказать что-то в следующем порядке:

if ( n.getRightChild() == null && n.getLeftChild() == null){
    double RootLeaf = Double.parseDouble(n.getValue());
    return RootLeaf;
} else if (n.getLeftChild() == null) {
    // Evaluate prefix operator -- assume no postfix operators
    double operand1 = n.getRightChild().evaluate(x);
    double result = n.getType().evaluateMonadic(operand1);
    return result;
} else {
    // Evaluate diadic operator
    double operand1 = n.getLeftChild().evaluate(x);
    double operand2 = n.getRightChild().evaluate(x);
    double result = n.getType().evaluateDiadic(operand1, operand2);
    return result;
}

(Освобождаюсь от вашей структуры, потому что я не знаю всего намерения всего.)

(Я предполагаю, что ваша структура определена для оценки функции только одной переменной, поэтому вы передаете x вместо того, чтобы передавать словарь значений переменных.)

...