62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
from collections import deque
|
|
|
|
|
|
class TreeNode(object):
|
|
def __init__(self, value):
|
|
self.value = value
|
|
self.left_node = None
|
|
self.right_node = None
|
|
|
|
def __str__(self):
|
|
return str(self.value)
|
|
|
|
|
|
class BinarySearchTree(object):
|
|
def __init__(self):
|
|
self.root = None
|
|
|
|
def add(self, value):
|
|
if(self.root is None):
|
|
self.root = TreeNode(value)
|
|
else:
|
|
inserted = False
|
|
cur_node = self.root
|
|
|
|
while not inserted:
|
|
if(value <= cur_node.value):
|
|
if(cur_node.left_node):
|
|
cur_node = cur_node.left_node
|
|
else:
|
|
cur_node.left_node = TreeNode(value)
|
|
inserted = True
|
|
elif(value > cur_node.value):
|
|
if(cur_node.right_node):
|
|
cur_node = cur_node.right_node
|
|
else:
|
|
cur_node.right_node = TreeNode(value)
|
|
inserted = True
|
|
|
|
def search(self, value):
|
|
cur_node = self.root
|
|
found = False
|
|
while not found:
|
|
if(cur_node is None):
|
|
return None
|
|
elif(value < cur_node.value):
|
|
cur_node = cur_node.left_node
|
|
elif(value > cur_node.value):
|
|
cur_node = cur_node.right_node
|
|
elif(value == cur_node.value):
|
|
return cur_node
|
|
|
|
def list(self):
|
|
elements = deque()
|
|
self.trav_inorder(self.root, elements)
|
|
return elements
|
|
|
|
def trav_inorder(self, node, elements):
|
|
if(node is not None):
|
|
self.trav_inorder(node.left_node, elements)
|
|
elements.append(node.value)
|
|
self.trav_inorder(node.right_node, elements)
|