Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 | 31 |
Tags
- DP알고리즘
- 그래프탐색
- 백준
- 코딩테스트
- Datastructure
- 코테
- 문제풀이
- 알고리즘
- greedy
- 자료구조
- 다이나믹프로그래밍
- 데이터마이닝
- 수학
- DFS
- Baekjoon
- solvedac
- dp
- 문자열
- 정렬
- 반복문
- 그래프
- 너비우선탐색
- PYTHON
- 그리디
- 파이썬
- 프로그래머스
- 큐
- 깊이우선탐색
- 그리디알고리즘
- BFS
Archives
- Today
- Total
nyunu
[자료구조] 이진트리 응용 - 평가트리 (in python) 본문
728x90
강의출처) 숙명여자대학교 소프트웨어융합전공 강의 "자료구조", 이현자 교수님
코드 결과)
https://github.com/nyunu/data_structure/blob/main/%EC%9D%B4%EC%A7%84%ED%8A%B8%EB%A6%AC.ipynb
GitHub - nyunu/data_structure
Contribute to nyunu/data_structure development by creating an account on GitHub.
github.com
평가트리
평가트리란 ?
: 이진 트리에 저장된 수식을 탐색하면서 값을 계산할 수 있는 트리
-> 노드 구조
- left, right : 연결 링크
- data : 노드가 가지고 있는 값
- value : 수식의 계산 값
[예제 1] 논리 연산식 평가
- data : boolean variable (T, F) or logical operation (Not, And, Or)
- 재귀함수를 사용하여 풀이
- 각 노드가 담고 있는 data가 무엇이냐에 따라 계산한 결과를 value에 저장
= data의 값에 따라 value값을 변경
class Node:
def __init__(self, item):
self.data = item
self.value = None
self.rchild = None
self.lchild = None
class Tree:
def evaluateBool(self, node):
if node:
self.evaluateBool(node.lchild)
self.evaluateBool(node.rchild)
if node.data == 'or':
node.value = node.lchild.value or node.rchild.value
print("%3s"%node.data, ':', node.value)
elif node.data == 'and':
node.value = node.lchild.value and node.rchild.value
print("%3s"%node.data, ':', node.value)
elif node.data == 'not':
node.value = not node.rchild.value
print("%3s"%node.data, ':', node.value)
elif node.data == 'TRUE':
node.value = True
print("%3s"%node.data, ':', node.value)
elif node.data == 'FALSE':
node.value = False
print("%3s"%node.data, ':', node.value)
else:
print("%3s"%node.data, ':', node.value)
[예제 2] 산술 연산식 평가
- data: 정수, 산술 연산자 (+, -, *, ...)
- 재귀함수를 사용하여 풀이
- 각 노드가 담고 있는 data가 무엇이냐에 따라 계산한 결과를 value에 저장
class Node:
def __init__(self, item):
self.data = item
self.value = None
self.rchild = None
self.lchild = None
class Tree:
def evaluate(self, node):
if node:
self.evaluate(node.lchild)
self.evaluate(node.rchild)
if node.data == '+':
node.value = node.lchild.value + node.rchild.value
print("%3s"%node.data, ':', node.value)
elif node.data == '-':
node.value = node.lchild.value - node.rchild.value
print("%3s"%node.data, ':', node.value)
elif node.data == '*':
node.value = node.lchild.value * node.rchild.value
print("%3s"%node.data, ':', node.value)
elif node.data == '/':
node.value = node.lchild.value // node.rchild.value
print("%3s"%node.data, ':', node.value)
elif node.data == '%':
node.value = node.lchild.value % node.rchild.value
print("%3s"%node.data, ':', node.value)
else:
node.value = int(node.data)
print("%3s"%node.data, ':', node.value)
728x90
'Data Structure & Algorithm' 카테고리의 다른 글
[자료구조] DFS(깊이 우선 탐색) & BFS(너비 우선 탐색) (in python) (0) | 2024.01.21 |
---|---|
[알고리즘] 알고리즘 분석 방법 (0) | 2023.12.27 |
[자료구조] 이진트리 표현법 (in python) (1) | 2023.06.18 |
[자료구조] 이진트리 정의 (in python) (1) | 2023.06.18 |
[자료구조] 원형 리스트, 이중 리스트 구현 (in python) (1) | 2023.06.18 |