2011-11-29 7 views
0

누구나 설명 할 수있는 방법 내가 식을 해결할 때 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() 
    } 
} 
+0

왜 그렇게 할 수 없습니까? 당신은 이것을 재귀 적으로 사용합니까? – Woot4Moo

+0

재귀 적으로 어떻게하는지 설명해 주시겠습니까? 내가하고 싶었다면, 루트를 유지하기 위해 매개 변수가 필요하다고 생각 했으므로 계속 나무를 통과 할 수 있습니다. –

답변

1

당신은 순서에 뭔가를 언급하지 않았다 :

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을 전달하는 이유 중 하나 인 변수 하나만을 평가한다고 가정합니다.

+0

evaluateMonadic (double)이하는 일을 설명해 주시겠습니까? getType()이 int를 반환하기 때문에 작동하지 않습니다. –

+0

"type"이 연산자의 유형이고 "evaluateMonadic"이 해당 연산자를 평가한다고 가정했습니다. 'evaluateMonadic (n.getType(), operand1)'또는 무엇이든 상관 없습니다. 그리고 물론, evaluateDiadic은 diadic, two-operand 연산자와 비슷합니다. –

+0

Monadics를 사용하지 않고이 작업을 수행 할 수있는 다른 방법이 있습니까? 나는 그것들을 어떻게 사용하는지 정확히 모르겠습니다. –

관련 문제