Skip to content

Commit fa4f893

Browse files
Merge pull request matthewsamuel95#36 from cwkd/master
Create BinarySearchTree.py
2 parents df07e28 + 68197ce commit fa4f893

File tree

2 files changed

+294
-0
lines changed

2 files changed

+294
-0
lines changed

BST/python/BinarySearchTree.py

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
Created on Sun Oct 22 14:27:07 2017
4+
5+
@author: Daniel
6+
"""
7+
8+
# Binary Search Tree for an array of a single type
9+
10+
class BST:
11+
12+
def __init__(self, dataType):
13+
self._root = None
14+
self._dataType = dataType
15+
self._size = 0
16+
17+
def loadArray(self, inputArray):
18+
self.arr = inputArray
19+
20+
def getSize(self):
21+
return self._size
22+
23+
def isEmpty(self):
24+
return self._size == 0
25+
26+
def populateTree(self):
27+
for i in range(len(self.arr)):
28+
self.insert(self.arr[i])
29+
30+
def insert(self, value):
31+
if type(value) == self._dataType:
32+
itemNum = self._size
33+
newNode = Node(value, type(value), itemNum, None, None, None)
34+
if (self._root == None):
35+
self._root = newNode
36+
self._size += 1
37+
return
38+
39+
pointer = self._root
40+
currentVal = pointer.getData()
41+
while True:
42+
if value < currentVal:
43+
if pointer.getLeft() == None:
44+
newNode.setParent(pointer)
45+
pointer.setLeft(newNode)
46+
self._size += 1
47+
return
48+
else:
49+
pointer = pointer.getLeft()
50+
currentVal = pointer.getData()
51+
52+
elif value > currentVal:
53+
if pointer.getRight() == None:
54+
newNode.setParent(pointer)
55+
pointer.setRight(newNode)
56+
self._size += 1
57+
return
58+
else:
59+
pointer = pointer.getRight()
60+
currentVal = pointer.getData()
61+
62+
elif value == currentVal:
63+
print "Value already exists in BST."
64+
return
65+
66+
def search(self, value):
67+
if type(value) == self._dataType:
68+
if (self._root == None):
69+
return False
70+
71+
pointer = self._root
72+
currentVal = pointer.getData()
73+
while True:
74+
if value < currentVal:
75+
if pointer.getLeft() == None:
76+
return False
77+
78+
pointer = pointer.getLeft()
79+
currentVal = pointer.getData()
80+
81+
elif value > currentVal:
82+
if pointer.getRight() == None:
83+
return False
84+
85+
pointer = pointer.getRight()
86+
currentVal = pointer.getData()
87+
88+
elif value == currentVal:
89+
return pointer.getItemNum()
90+
91+
def inOrderTraversal(self, node):
92+
if node != None:
93+
self.inOrderTraversal(node.getLeft())
94+
self.sorted.append(node.getData())
95+
self.inOrderTraversal(node.getRight())
96+
97+
def getSorted(self):
98+
self.sorted = list()
99+
self.inOrderTraversal(self._root)
100+
return self.sorted
101+
102+
103+
class Node:
104+
105+
def __init__(self, data, dataType, itemNum, parent, left, right):
106+
self._data = data
107+
self._dataType = dataType # specifies type which node holds
108+
self._itemNum = itemNum # position in parent array
109+
self._parent = parent # link to parent node
110+
self._left = left # link to left child node
111+
self._right = right # link to right child node
112+
113+
114+
def getData(self):
115+
return self._data
116+
117+
def setData(self, newData):
118+
if type(newData) == self._dataType:
119+
self._data = newData
120+
else:
121+
print "Error, wrong data type."
122+
123+
def getItemNum(self):
124+
return self._itemNum
125+
126+
def getParent(self):
127+
return self._parent
128+
129+
def setParent(self, newParent):
130+
self._parent = newParent
131+
132+
def getLeft(self):
133+
return self._left
134+
135+
def setLeft(self, newLeft):
136+
self._left = newLeft
137+
138+
def getRight(self):
139+
return self._right
140+
141+
def setRight(self, newRight):
142+
self._right = newRight
143+
144+
145+
if __name__ == "__main__":
146+
bst = BST(int)
147+
bst.loadArray((11,20,18,4,5,7,2,0))
148+
bst.populateTree()
149+
print bst.search(18)
150+
print bst.getSorted()
151+

Searching/BST/BinarySearchTree.py

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
# Binary Search Tree for an array of a single type
2+
3+
class BST:
4+
5+
def __init__(self, dataType):
6+
self._root = None
7+
self._dataType = dataType
8+
self._size = 0
9+
10+
def loadArray(self, inputArray):
11+
self.arr = inputArray
12+
13+
def getSize(self):
14+
return self._size
15+
16+
def isEmpty(self):
17+
return self._size == 0
18+
19+
def populateTree(self):
20+
for i in range(len(self.arr)):
21+
self.insert(self.arr[i])
22+
23+
def insert(self, value):
24+
if type(value) == self._dataType:
25+
itemNum = self._size
26+
newNode = Node(value, type(value), itemNum, None, None, None)
27+
if (self._root == None):
28+
self._root = newNode
29+
self._size += 1
30+
return
31+
32+
pointer = self._root
33+
currentVal = pointer.getData()
34+
while True:
35+
if value < currentVal:
36+
if pointer.getLeft() == None:
37+
newNode.setParent(pointer)
38+
pointer.setLeft(newNode)
39+
self._size += 1
40+
return
41+
else:
42+
pointer = pointer.getLeft()
43+
currentVal = pointer.getData()
44+
45+
elif value > currentVal:
46+
if pointer.getRight() == None:
47+
newNode.setParent(pointer)
48+
pointer.setRight(newNode)
49+
self._size += 1
50+
return
51+
else:
52+
pointer = pointer.getRight()
53+
currentVal = pointer.getData()
54+
55+
elif value == currentVal:
56+
print "Value already exists in BST."
57+
return
58+
59+
def search(self, value):
60+
if type(value) == self._dataType:
61+
if (self._root == None):
62+
return False
63+
64+
pointer = self._root
65+
currentVal = pointer.getData()
66+
while True:
67+
if value < currentVal:
68+
if pointer.getLeft() == None:
69+
return False
70+
71+
pointer = pointer.getLeft()
72+
currentVal = pointer.getData()
73+
74+
elif value > currentVal:
75+
if pointer.getRight() == None:
76+
return False
77+
78+
pointer = pointer.getRight()
79+
currentVal = pointer.getData()
80+
81+
elif value == currentVal:
82+
return pointer.getItemNum()
83+
84+
def inOrderTraversal(self, node):
85+
if node != None:
86+
self.inOrderTraversal(node.getLeft())
87+
self.sorted.append(node.getData())
88+
self.inOrderTraversal(node.getRight())
89+
90+
def getSorted(self):
91+
self.sorted = list()
92+
self.inOrderTraversal(self._root)
93+
return self.sorted
94+
95+
96+
class Node:
97+
98+
def __init__(self, data, dataType, itemNum, parent, left, right):
99+
self._data = data
100+
self._dataType = dataType # specifies type which node holds
101+
self._itemNum = itemNum # position in parent array
102+
self._parent = parent # link to parent node
103+
self._left = left # link to left child node
104+
self._right = right # link to right child node
105+
106+
107+
def getData(self):
108+
return self._data
109+
110+
def setData(self, newData):
111+
if type(newData) == self._dataType:
112+
self._data = newData
113+
else:
114+
print "Error, wrong data type."
115+
116+
def getItemNum(self):
117+
return self._itemNum
118+
119+
def getParent(self):
120+
return self._parent
121+
122+
def setParent(self, newParent):
123+
self._parent = newParent
124+
125+
def getLeft(self):
126+
return self._left
127+
128+
def setLeft(self, newLeft):
129+
self._left = newLeft
130+
131+
def getRight(self):
132+
return self._right
133+
134+
def setRight(self, newRight):
135+
self._right = newRight
136+
137+
138+
if __name__ == "__main__":
139+
bst = BST(int)
140+
bst.loadArray((11,20,18,4,5,7,2,0))
141+
bst.populateTree()
142+
print bst.search(18)
143+
print bst.getSorted()

0 commit comments

Comments
 (0)