자료구조
[자료구조] 수식 트리
김천종
2022. 11. 11. 21:08
반응형
수식 트리 : 산술식을 트리 형태로 표현한 것
단말노드 : 피연산자 (operand)
비단말노드 : 연산자 (operator)
수식 트리에서는 후위순회를 사용해서 연산을 진행한다.
### 수식 트리 계산 ###
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
int evaluate() { return evaluate(root); }
int evaluate(BinaryNode* Node) {
if (Node == NULL) return 0;
// 재귀적으로 함수를 호출하다가 NULL을 만나면 0 반환
if (Node->isLeaf()) return Node->getData();
// 단말 노드일때 노드의 데이터를 반환, 피연산자로 쓰임
else {
int op1 = evaluate(Node->getLeft());
// 왼쪽 서브트리를 매개변수로 함수를 호출하는데 단말노드일 경우 값을 반환해서 op1를 초기화
int op2 = evaluate(Node->getright());
// 오른쪽 서브트리를 매개변수로 함수를 호출하는데 단말노드일 경우 값을 반환해서 op2를 초기화
switch (Node->getData()) {
case '+': return op1 + op2;
case '-': return op1 - op2;
case '*': return op1 * op2;
case '/': return op1 / op2;
}
// 자신 노드의 값에 맞는 연산을 수행 ( 값은 연산자로 구성되어 있음 )
// 연산이 완료되면 값을 반환해서 상위 노드(연산자)의 피연산자로 사용됨
return 0;
// 위의 식을 모두 완료했는데도 함수가 반환되지 않으면 함수를 종료 ( 비정상적임 )
}
}
|
cs |
반응형