Python
[OOP] Binary Search Tree 자료구조 만들기
SCodaily
2023. 3. 20. 19:28
Binary Search Tree란?
- 이진 탐색 트리
- Binary Tree : 오직 두 개의 자식을 가지는 tree구조
- Binary Search Tree : 부모의 왼쪽 자식은 부모의 데이터값보다 작은 값을 가짐, 오른쪽 자식은 크거나 같은 값을 가짐
Binary Search Tree의 장점
1. 이진 탐색의 장점 -> 탐색 시간복잡도 O(logN), 삽입 삭제 불가능
2. 연결리스트의 장점 -> 데이터의 삽입 삭제 가능
Binary Search Tree의 시간복잡도
데이터 삽입, 삭제, 탐색 -> O(logN)
Binary Search Tree의 기본 구성 요소
- Attribution ( 속성 )
- Node
1. 데이터 값
2. left child, right child
class Node:
def __init__(self, data=None):
self.data = data
self.left = None
self.right = None
- BST ( Binary Search Tree )
1. Root ( Head )
class BinarySearchtree:
def __init__(self):
self.root = Node(None)
Binary Search Tree의 주 기능 ( Method )
class BinarySearchtree:
def __init__(self):
self.root = Node(None)
def insert(self, value):
new_node = Node(value)
if self.root.data is None:
self.root = new_node
return
else:
current_node = self.root
while True:
if value >= current_node.data:
if current_node.right is None:
current_node.right = new_node
return
else :
current_node = current_node.right
else :
if current_node.left is None:
current_node.left = new_node
return
else :
current_node = current_node.left
def print_tree(self):
# bfs method
need_visited = deque()
need_visited.append(self.root)
while need_visited:
current_node = need_visited.popleft()
if current_node.data is not None:
print(current_node.data, end=" ")
if current_node.left is not None:
need_visited.append(current_node.left)
if current_node.right is not None:
need_visited.append(current_node.right)
print()
def find(self, value):
current_node = self.root
if current_node.data is None:
return False
while True:
if value > current_node.data:
if current_node.right is None:
return False
else:
current_node = current_node.right
elif value < current_node.data:
if current_node.left is None:
return False
else:
current_node = current_node.left
else:
return True
BST = BinarySearchtree()
BST.insert(10)
BST.insert(5)
BST.insert(15)
BST.insert(3)
BST.insert(12)
BST.insert(7)
BST.print_tree()
# 출력
# 10 5 15 3 7 12
print(BST.find(7))
# 출력
# True
print(BST.find(8))
# 출력
# False