[자료구조] 수식 트리

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;
            // 위의 식을 모두 완료했는데도 함수가 반환되지 않으면 함수를 종료 ( 비정상적임 )
            
        }
    }
Colored by Color Scripter
cs
반응형

'자료구조' 카테고리의 다른 글

[자료구조] 이진탐색트리 삭제 연산  (0) 2022.11.18
[자료구조] 이진탐색트리, BinarySearhTree 개념, 탐색, 삽입  (0) 2022.11.15
[자료구조] 이진트리 연산  (0) 2022.11.11
[자료구조]이진트리(BinaryTree) 순회  (0) 2022.11.07
[자료구조] 이진트리(Binary Tree) 기초  (0) 2022.11.07
'자료구조' 카테고리의 다른 글
  • [자료구조] 이진탐색트리 삭제 연산
  • [자료구조] 이진탐색트리, BinarySearhTree 개념, 탐색, 삽입
  • [자료구조] 이진트리 연산
  • [자료구조]이진트리(BinaryTree) 순회
김천종
김천종
  • 김천종
    김천종
    김천종
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • 파이썬 (6)
      • Pandas (24)
      • 자료구조 (14)
      • 알고리즘 (4)
      • 아무거나 (16)
      • 머신러닝 (20)
      • ML 실습 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
김천종
[자료구조] 수식 트리
상단으로

티스토리툴바