모든 노드에 대해서,
각 노드는 (key, value)의 쌍으로
class Node:
def __init__(self, key, data):
self.key = key
self.data = data
self.left = None
self.right = None
def inorder(self):
traversal = []
if self.left:
traversal += self.left.inorder()
traversal.append(self)
if self.right:
traversal += self.right.inorder()
return traversal
def min(self):
if self.left: # 왼쪽이 작은 값이므로
return self.left.min()
else:
return self
def max(self):
# min()과 완전히 대칭
def lookup(self, key, parent = None):
if key < self.key:
# 왼쪽 서브트리에 있을 경우
if self.left:
return self.left.lookup(key, self)
else:
return None, None
elif key > self.key:
# 오른쪽 서브트리에 있을 경우
if self.right:
return self.right.lookup(key, self)
else:
return None, None
else:
return self, parent
class BinSerchTree:
def __init__(self):
self.root = None
def inorder(self):
if self.root:
return self.root.inorder()
else:
return []
def min(self):
if self.root:
return self.root.min()
else:
return None
def lookup(self, key):
if self.root:
return self.root.lookup(key)
else: return None, None
def insert(self, key, data):
if self.root:
self.root.insert(key, data)
else:
self.root = Node(key, data)
입력 인자: 찾으려는 대상 키
리턴: 찾은 노드와, 그것의 부모 노드 (각각, 없으면 None으로)
입력 인자: 키, 데이터 원소
리턴: 없음