Skip to content

Commit 8336a9b

Browse files
committed
feat: 수식 트리 계산 기능 추가
1 parent 6c91be8 commit 8336a9b

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

yoonexample/src/main/java/tree/expressiontree/ExpressionTreeImpl.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,40 @@ public ExpressionTreeImpl(char[] postfixExpression) {
2727

2828
@Override
2929
public int evaluateTree() {
30+
return evaluateTree(this.root);
31+
}
32+
33+
private int evaluateTree(TraversableBinaryTreeNode<Character> node) {
34+
TraversableBinaryTreeNode<Character> leftSubTree = node.getLeftSubTree();
35+
TraversableBinaryTreeNode<Character> rightSubTree = node.getRightSubTree();
36+
37+
if (leftSubTree == null && rightSubTree == null) {
38+
return Character.getNumericValue(node.getData()); // 단말 노드는 피연산자임
39+
}
40+
41+
int op1 = 0;
42+
int op2 = 0;
43+
if (leftSubTree != null) {
44+
op1 = evaluateTree(leftSubTree);
45+
}
46+
if (rightSubTree != null) {
47+
op2 = evaluateTree(rightSubTree);
48+
}
49+
50+
switch (node.getData()) {
51+
case '+':
52+
return op1 + op2;
53+
case '-':
54+
return op1 - op2;
55+
case '*':
56+
return op1 * op2;
57+
case '/':
58+
if (op2 == 0) {
59+
throw new ArithmeticException("Can't be division by zero.");
60+
}
61+
return op1 / op2;
62+
}
63+
3064
return 0;
3165
}
3266

0 commit comments

Comments
 (0)