diff --git a/README.md b/README.md new file mode 100644 index 0000000..e3a7e22 --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +README + +A set of data structures that allow for the manipulation and implementation of Binary Search Trees. + + +BST.py + + BinarySearchTree is a class, that accepts a list or tuple of integers or floats on initiation and creates an instance of a Binary search tree. + + ********* + *Methods* + ********* + + *search- Accepts one parameter as integer or float. Will search instance of BST for value and return said Node if found. Returns None if not found. + + *insert- Accepts one parameter as integer or float. Will create a new Node with given value and insert into the BST properly. + + *breadth_first- Returns a breadth first traversal generator of the current BST. + + *Depth First Traversal* + + *pre_order- Returns a depth first traversal, pre order, generator of the current BST. + + *in_order- Returns a depth first traversal, in order, generator of the current BST. + + *post_order- Returns a depth first traversal, post order, generator of the current BST. diff --git a/bstree b/bstree deleted file mode 100644 index e69de29..0000000 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..e9be70b --- /dev/null +++ b/setup.py @@ -0,0 +1,23 @@ +"""Setup and details on use.""" +from setuptools import setup + +extra_packages = { + 'testing': ['ipython', 'pytest', 'pytest-cov', 'tox'] +} + +setup( + name='data-structures', + desctription='A variety of data structures built with Python.', + version='0.1', + author='James Salamonsen, Alex Short', + author_email='jamessalamonsen@gmail.com', + license='MIT', + py_modules=[], + package_dir={'': 'src'}, + install_requires=[], + extras_require=extra_packages, + entry_points={ + 'console_scripts': [ + ] + } +) diff --git a/src/BST.py b/src/BST.py index c034ddc..9b88178 100644 --- a/src/BST.py +++ b/src/BST.py @@ -2,6 +2,8 @@ class Node(object): + """Class for the data node in our BST.""" + def __init__(self, entry, left=None, iterable=None): """Node for tree.""" self.val = entry @@ -10,10 +12,10 @@ def __init__(self, entry, left=None, iterable=None): class BinarySearchTree(object): + """Class with the containing methods to manipulate and create a BST.""" def __init__(self, iterable=None): - # import pdb; pdb.set_trace() - """This will sety what wwe will be iterating through.""" + """The init will set what we will be iterating through.""" self.visited = [] self.list = [] self.size = 0 @@ -24,7 +26,7 @@ def __init__(self, iterable=None): self.insert(element) def insert(self, entry): - # import pdb; pdb.set_trace() + """The insert method takes one integer/float and adds it to the BST.""" if type(entry) not in [float, int]: raise TypeError("NUMBERS!!!!! numbers...") if not self.root: @@ -51,7 +53,7 @@ def insert(self, entry): return def search(self, entry): - """.""" + """Search method takes one float/integer and will search the BST for said value.""" if type(entry) not in [float, int]: raise TypeError("NUMBERS!!!!! numbers...") else: @@ -69,6 +71,7 @@ def search(self, entry): return curr def breadth_first(self): + """Yield a generator for a breadth first traversal.""" nodes_to_visit = [] curr = self.root nodes_to_visit.append(curr) @@ -80,60 +83,65 @@ def breadth_first(self): nodes_to_visit.append(curr.right) yield curr - def pre_orderTrav(self, entry): + def pre_order_trav(self, entry): + """Helper method to populate a depth first pre order traversal.""" if entry: curr = entry else: curr = self.root yield curr.val if curr.left: - for item in self.inOrderTrav(curr.left): + for item in self.pre_order_trav(curr.left): yield item if curr.right: - for item in self.inOrderTrav(curr.right): + for item in self.pre_order_trav(curr.right): yield item - def preOrder(self): - for node_data in self.inOrderTrav(): + def pre_order(self): + """Call method for a generator return on a preorder depth first traversal.""" + for node_data in self.pre_order_trav(): yield node_data - def inOrderTrav(self, entry=None): + def in_order_trav(self, entry=None): + """Helper method to populate a depth first in order traversal.""" if entry: curr = entry else: curr = self.root if curr.left: - for item in self.inOrderTrav(curr.left): + for item in self.in_order_trav(curr.left): yield item yield curr.val if curr.right: - for item in self.inOrderTrav(curr.right): + for item in self.in_order_trav(curr.right): yield item - def inOrder(self): - for node_data in self.inOrderTrav(): + def in_order(self): + """Call method for a generator return on a in order depth first traversal.""" + for node_data in self.in_order_trav(): yield node_data - def post_orderTrav(self, entry): + def post_order_trav(self, entry): + """Helper method to populate a depth first post order traversal.""" if entry: curr = entry else: curr = self.root if curr.left: - for item in self.inOrderTrav(curr.left): + for item in self.post_order_trav(curr.left): yield item if curr.right: - for item in self.inOrderTrav(curr.right): + for item in self.post_order_trav(curr.right): yield item yield curr.val - def postOrder(self): - for node_data in self.inOrderTrav(): + def post_order(self): + """Call method for a generator return on a post order depth first traversal.""" + for node_data in self.post_order_trav(): yield node_data if __name__ == '__main__': - import sys - b = BinarySearchTree([5,3,7,2,8,4,9,1]) + b = BinarySearchTree([5, 3, 7, 2, 8, 4, 9, 1]) gen = b.inOrder() for i in range(5): print(next(gen)) diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..36db6d0 --- /dev/null +++ b/tox.ini @@ -0,0 +1,8 @@ +[tox] +envlist = py27, py36 + +[testenv] +commands = py.test src --cov=src --cov-report term-missing +deps = + pytest + pytest-cov \ No newline at end of file