티스토리 뷰
'어서와! 자료구조와 알고리즘은 처음이지?'
이진 트리(Binary Tree)
연산의 정의
1. size() - 현재 트리에 포함되어 있는 노드의 수를 구한다.
2. depth() - 현재 트리의 깊이 (또는 높이, height)를 구한다.
3. 순회(traversal)
이진 트리의 구현 - 노드(Node)
class Node:
def __init__(self, item):
self.data = item
self.left = None
self.right = None
이진 트리의 구현 - 트리(Tree)
class BinaryTree:
# r 은 node
def __init__(self, r):
self.root = r
이진 트리의 구현 - size()
재귀적인 방법으로 쉽게 구할 수 있다.
class Node:
def size(self):
l = self.left.size() if self.left else 0
r = self.right.size() if self.right else 0
return l + r + 1
class BinaryTree:
def size(self):
if self.root:
return self.root.size()
else:
return 0
이진 트리의 구현 - depth()
이진 트리의 순회(Traversal)
1. 깊이 우선 순회(depth first traversal)
✔ 중위 순회(in-order traversal)
✔ 전위 순회(pre-order traversal)
✔ 후위 순회(post-order traversal)
2. 넓이 우선 순회(breadth first traversal)
중위 순회(In-order Traversal)
class Node:
def inorder(self):
traversal = []
if self.left:
traversal += self.left.inorder()
traversal.append(self.data)
if self.right:
traversal += self.right.inorder()
return traversal
class BinaryTree:
def inorder(self):
if self.root:
return self.root.inorder()
else:
return []
전위 순회(Pre-order Traversal)
후위 순회(Post-order Traversal)
[ 문1. 이진트리의 depth( ) 연산 구현 ]
class Node:
def __init__(self, item):
self.data = item
self.left = None
self.right = None
def size(self):
l = self.left.size() if self.left else 0
r = self.right.size() if self.right else 0
return l + r + 1
def depth(self):
l = self.left.depth() if self.left else 0
r = self.right.depth() if self.right else 0
if l >= r:
return l + 1
else:
return r + 1
class BinaryTree:
def __init__(self, r):
self.root = r
def size(self):
if self.root:
return self.root.size()
else:
return 0
def depth(self):
if self.root:
return self.root.depth()
else:
return 0
def solution(x):
return 0
[ 문2. 이진트리 후위순회 구현 ]
class Node:
def __init__(self, item):
self.data = item
self.left = None
self.right = None
def inorder(self):
traversal = []
if self.left:
traversal += self.left.inorder()
traversal.append(self.data)
if self.right:
traversal += self.right.inorder()
return traversal
def postorder(self):
traversal = []
if self.left:
traversal += self.left.postorder()
if self.right:
traversal += self.right.postorder()
traversal.append(self.data)
return traversal
class BinaryTree:
def __init__(self, r):
self.root = r
def inorder(self):
if self.root:
return self.root.inorder()
else:
return []
def postorder(self):
if self.root:
return self.root.postorder()
else:
return []
def solution(x):
return 0
[ 문3. 이진트리 전위순회 구현 ]
class Node:
def __init__(self, item):
self.data = item
self.left = None
self.right = None
def inorder(self):
traversal = []
if self.left:
traversal += self.left.inorder()
traversal.append(self.data)
if self.right:
traversal += self.right.inorder()
return traversal
def preorder(self):
traversal = []
traversal.append(self.data)
if self.left:
traversal += self.left.preorder()
if self.right:
traversal += self.right.preorder()
return traversal
class BinaryTree:
def __init__(self, r):
self.root = r
def inorder(self):
if self.root:
return self.root.inorder()
else:
return []
def preorder(self):
if self.root:
return self.root.preorder()
else:
return []
def solution(x):
return 0
'Algorithm > 알고리즘' 카테고리의 다른 글
[프로그래머스 강의] 20강 이진탐색트리(1) (0) | 2022.06.29 |
---|---|
[프로그래머스 강의] 19강 이진 트리(Binary Tree) - BFS (0) | 2022.05.23 |
[프로그래머스 강의] 17강 트리 (0) | 2022.05.13 |
[프로그래머스 강의] 16강 우선순위 큐 (0) | 2022.05.11 |
[프로그래머스 강의] 15강 환형 큐 (0) | 2022.05.10 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 네트워크
- 이차 리스트
- It
- 보험
- 스터디
- https
- 파이썬
- 운영체제
- CS 스터디
- Greedy sort
- CS
- 리스트2
- 프로그래머스
- 리스트함축
- 데이터베이스
- 자료구조와알고리즘 23강
- 프로그래머스강의
- 자료구조
- 자바
- 연결리스트활용
- 이진탐색
- SW
- 프로세스 주소공간
- 완전탐색
- CS.
- 리스트
- 코드업 기초
- 알고리즘
- 리스트 복사
- 정렬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함