Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -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.
Empty file removed bstree
Empty file.
23 changes: 23 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
@@ -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': [
]
}
)
50 changes: 29 additions & 21 deletions src/BST.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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:
Expand All @@ -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:
Expand All @@ -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)
Expand All @@ -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))
8 changes: 8 additions & 0 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[tox]
envlist = py27, py36

[testenv]
commands = py.test src --cov=src --cov-report term-missing
deps =
pytest
pytest-cov