Skip to content

Commit 52752fb

Browse files
author
Mari Wahl
committed
trees organized
1 parent 28b84ce commit 52752fb

16 files changed

+257
-684
lines changed

src/trees/__init__.py

100644100755
File mode changed.

src/trees/binary_search_tree.py

100644100755
Lines changed: 60 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,103 @@
11
#!/usr/bin/python
22

3-
__author__ = "Mari Wahl"
4-
__email__ = "[email protected]"
3+
__author__ = "bt3"
54

65

7-
from binary_tree import NodeBT, BinaryTree
6+
class Node(object):
87

8+
def __init__(self, item=None,):
99

10-
class NodeBST(NodeBT):
11-
12-
def __init__(self, item=None, level=0):
1310
self.item = item
14-
self.level = level
1511
self.left = None
1612
self.right = None
1713

14+
def __repr__(self):
15+
return '{}'.format(self.item)
16+
17+
18+
def _add(self, value):
19+
new_node = Node(value)
1820

19-
def _addNextNode(self, value, level_here=1):
20-
new_node = NodeBST(value, level_here)
2121
if not self.item:
2222
self.item = new_node
23+
2324
else:
2425
if value > self.item:
25-
self.right = self.right and self.right._addNextNode(value, level_here+1) or new_node
26+
self.right = self.right and self.right._add(value) or new_node
2627
elif value < self.item:
27-
self.left = self.left and self.left._addNextNode(value, level_here+1) or new_node
28+
self.left = self.left and self.left._add(value) or new_node
2829
else:
2930
print("BSTs do not support repeated items.")
30-
return self # this is necessary!!!
3131

32+
return self # this is necessary!!!
3233

3334

34-
def _searchForNode(self, value):
35+
def _search(self, value):
3536
if self.item == value:
36-
return self
37+
return True # or self
38+
3739
elif self.left and value < self.item:
38-
return self.left._searchForNode(value)
40+
return self.left._search(value)
41+
3942
elif self.right and value > self.item:
40-
return self.right._searchForNode(value)
43+
return self.right._search(value)
44+
4145
else:
4246
return False
4347

4448

49+
def _isLeaf(self):
50+
return not self.right and not self.left
51+
52+
53+
def _printPreorder(self):
54+
print self.item
4555

46-
class BinarySearchTree(BinaryTree):
56+
if self.left:
57+
return self.left._printPreorder()
58+
59+
if self.right:
60+
return self.right._printPreorder()
61+
62+
63+
64+
class BST(object):
4765

4866
def __init__(self):
4967
self.root = None
5068

51-
def addNode(self, value):
69+
def add(self, value):
5270
if not self.root:
53-
self.root = NodeBST(value)
71+
self.root = Node(value)
5472
else:
55-
self.root._addNextNode(value)
73+
self.root._add(value)
74+
75+
def printPreorder(self):
76+
if self.root:
77+
self.root._printPreorder()
5678

79+
def search(self, value):
80+
if self.root:
81+
return self.root._search(value)
5782

5883

5984

6085
if __name__ == '__main__':
61-
bst = BinarySearchTree()
86+
87+
bst = BST()
6288
print "Adding nodes 1 to 10 in the tree..."
63-
for i in range(1, 10):
64-
bst.addNode(i)
65-
print "Is 8 a leaf? ", bst.isLeaf(8)
66-
print "Whats the level of node 8? ", bst.getNodeLevel(8)
67-
print "Is node 10 a root? ", bst.isRoot(10)
68-
print "Is node 1 a root? ", bst.isRoot(1)
69-
print "Whats the tree height? ", bst.getHeight()
70-
print "Is this tree BST? ", bst.isBST()
71-
print "Is this tree balanced? ", bst.isBalanced()
89+
for i in range(1, 11):
90+
bst.add(i)
91+
92+
print
93+
print "Searching for nodes 16 and 6"
94+
print bst.search(16)
95+
print bst.search(6)
96+
97+
print
98+
print "Printing preorder..."
99+
bst.printPreorder()
100+
101+
72102

73103

0 commit comments

Comments
 (0)