[Data Structure] Binary Tree
2024. 3. 23. 13:23ㆍDataStructure
1. Binary Tree란?
위 사진은 Binary Tree의 구조를 나타내는 사진이다. 앞서 설명한 General Tree와 다른 점이 보이는가? 그건 바로 child가 최대 2명이라는 거다. 그럼 여기서 의문이 든다. child를 여러 명으로 생성하는 General Tree를 쓰지 왜 child가 두 명으로 제한되는 Binary Tree를 쓰는 것인가? 그것은 바로 데이터를 찾을 때 유용하기 때문이다.
예를들어, 리스트에 들어있는 숫자 중에서 내가 원하는 숫자를 찾는다고 가정하자. 이럴 경우, 처음부터 찾아가기 시작하여 시간복잡도가 크다. 만약 이 시간 복잡도를 줄이기 위해서는 어떻게 해야 할까? 그건 바로 규칙을 정해 수를 나누는 거다.
이 과정에서 Binary Tree를 쓰면 시간복잡도가 O(log(n))으로 줄어들어 효율적으로 찾을 수 있다.
따라서, Binary Tree는 최소 최대 또는 내가 원하는 수를 찾을 때 쓸 수 있겠다는 생각이 들었다.
class BinarySearchTree:
def __init__(self,data):
self.data = data
self.left = None
self.right = None
def add_child(self,data):
if data == self.data:
return
if data < self.data:
if self.left:
self.left.add_child(data)
else:
self.left = BinarySearchTree(data)
else:
if self.right:
self.right.add_child(data)
else:
self.right = BinarySearchTree(data)
def search(self,val):
if self.data == val:
return True
if val < self.data:
if self.left:
return self.left.search(val)
else:
return False
if val > self.data:
if self.right:
return self.right.search(val)
else:
return False
def in_order_traversal(self):
elements = []
if self.left:
elements +=self.left.in_order_traversal()
elements.append(self.data)
if self.right:
elements += self.right.in_order_traversal()
return elements
def find_min(self):
if self.left is None:
return self.data
return self.left.find_min()
def find_max(self):
if self.right is None:
return self.data
return self.right.find_max()
def calculate_sum(self):
elements = self.in_order_traversal()
sum_ele = sum(elements)
return sum_ele
def post_order_traversal(self):
elements = []
if self.left:
elements += self.left.post_order_traversal()
if self.right:
elements += self.right.post_order_traversal()
elements.append(self.data)
return elements
def pre_order_traversal(self):
elements = [self.data]
if self.left:
elements.extend(self.left.pre_order_traversal())
if self.right:
elements.extend(self.right.pre_order_traversal())
return elements
'DataStructure' 카테고리의 다른 글
[Data Structure] Graph (1) | 2024.03.23 |
---|---|
[Data Structure] General Tree (1) | 2024.03.23 |
Queue를 이용한 간단한 구현에서 발견한 나의 문제점 (0) | 2024.03.11 |