-
[Python 자료구조 #탐색트리2] 이진탐색트리를 이용한 맵Programming 기초/Python 2023. 5. 26. 18:05
* 이진탐색트리를 이용한 맵
↓BSTNode(), inorder(), count_node(),search_bst()함수 코드참고.(이전 블로그 글 참고)
더보기class BSTNode:def __init__(self, key, value):self.key = keyself.value = valueself.left = Noneself.right = Nonedef inorder(n): # 중위 순회 함수if n is not None:inorder(n.left) # 왼쪽 서브트리 처리print(n.key, end=" ") # 루트노드 처리(화면 출력)inorder(n.right)def count_node(n):if n is None:return 0else:return 1 + count_node(n.left) + count_node(n.right)def search_bst(n, key):if n == None:return Noneelif key == n.key:return nelif key < n.key:return search_bst(n.left, key)else:return search_bst(n.right, key)이진탐색트리(Binary Search tree)을 이용한 Map 구현
# BSTMap의 ADT 구현 class BSTMap: def __init__(self): self.root = None def isEmpty(self): return self.root == None def clear(self): self.root = None def size(self): return count_node(self.root) def search(self, key): return search_bst(self.root, key) def searchValue(self, key): return search_value_bst(self.root, key) def findMax(self): return search_max_bst(self.root) def findMin(self): return search_min_bst(self.root) def insert(self, key, value=None): # 삽입연산 n = BSTNode(key, value) if self.isEmpty(): self.root = n else: insert_bst(self.root, n) def delete(self, key): # 삭제 연산 delete_bst(self.root, key) def display(self, msg="BSTMap :"): print(msg, end="") inorder(self.root) print()
map = BSTMap() data = [35, 18, 7, 26, 12, 3, 68, 22, 30, 99] print("[삽입 연산] : ", data) for key in data: map.insert(key) map.display("[중위 순회] : ") if map.search(26) != None: # 탐색연산 테스트 print("[탐색 26 ] : 성공") else: print("[탐색 26 ] : 실패") if map.search(25) != None: # 탐색연산 테스트 print("[탐색 25 ] : 성공") else: print("[탐색 25 ] : 실패") map.delete(3) # 삭제연산 테스트 map.display("[ 3 삭제] : ") map.delete(68) # 삭제연산 테스트 map.display("[ 68 삭제] : ") map.delete(18) # 삭제연산 테스트 map.display("[ 18 삭제] : ") map.delete(35) # 삭제연산 테스트 map.display("[ 35 삭제] : ") ---------------------------------------------------------- [삽입 연산] : [35, 18, 7, 26, 12, 3, 68, 22, 30, 99] [중위 순회] : 3 7 12 18 22 26 30 35 68 99 [탐색 26 ] : 성공 # 26은 트리에 있고 [탐색 25 ] : 실패 # 25는 트리에 없음 [ 3 삭제] : 7 12 18 22 26 30 35 68 99 [ 68 삭제] : 7 12 18 22 26 30 35 99 [ 18 삭제] : 7 12 22 26 30 35 99 [ 35 삭제] : 7 12 22 26 30 99
'Programming 기초 > Python' 카테고리의 다른 글
[Python 자료구조 #그래프2] 그래프의 탐색(DFS, BFS), 연결 성분 검사 (0) 2023.05.27 [Python 자료구조 #탐색트리3] AVL트리, AVL트리를 이용한 맵 (0) 2023.05.26 [Python 자료구조 #탐색트리1] 이진탐색트리(BST) (0) 2023.05.26 [Python 자료구조 #트리3] 힙(Heap), 허프만 코드 (0) 2023.05.25 [Python 자료구조 #트리2] 모르스 코드 결정트리 (0) 2023.05.25