Implement exercise binary-search-tree (#773)

This commit is contained in:
Rodrigo Oliveira
2017-11-13 19:09:54 -02:00
committed by Nathan Parsons
parent 16ba6f52d1
commit f236ea1ff6
5 changed files with 218 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
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)