Skip to content

Commit bade16c

Browse files
LambdaLambda
authored andcommitted
solve question 2
1 parent abd73de commit bade16c

File tree

6 files changed

+555
-7
lines changed

6 files changed

+555
-7
lines changed

names/binary_search_tree.py

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
import sys
2+
sys.path.append('../queue_and_stack')
3+
from dll_queue import Queue
4+
from dll_stack import Stack
5+
6+
7+
class BinarySearchTree:
8+
def __init__(self, value):
9+
self.value = value #root
10+
self.left = None
11+
self.right = None
12+
self.stack = Stack()
13+
self.queue = Queue()
14+
15+
# Insert the given value into the tree
16+
def insert(self, value):
17+
# pass
18+
if value < self.value:
19+
if self.left is None:
20+
self.left = BinarySearchTree(value)
21+
else:
22+
self.left.insert(value)
23+
else:
24+
if self.right is None:
25+
self.right = BinarySearchTree(value)
26+
else:
27+
self.right.insert(value)
28+
29+
30+
31+
# Return True if the tree contains the value
32+
# False if it does not
33+
def contains(self, target):
34+
# pass
35+
if self.value == target:
36+
return True
37+
38+
if self.left is None and self.right is None:
39+
return False
40+
41+
if target < self.value and self.left is not None:
42+
return self.left.contains(target)
43+
elif self.right is not None:
44+
return self.right.contains(target)
45+
46+
47+
48+
# Return the maximum value found in the tree
49+
def get_max(self):
50+
# pass
51+
if self.value is None:
52+
return None
53+
54+
if self.right is None:
55+
return self.value
56+
else:
57+
return self.right.get_max()
58+
59+
# Call the function `cb` on the value of each node
60+
# You may use a recursive or iterative approach
61+
def for_each(self, cb):
62+
# pass
63+
if self.value is None:
64+
return None
65+
cb(self.value)
66+
if self.right is not None:
67+
self.right.for_each(cb)
68+
if self.left is not None:
69+
self.left.for_each(cb)
70+
71+
# DAY 2 Project -----------------------
72+
73+
# Print all the values in order from low to high
74+
# Hint: Use a recursive, depth first traversal
75+
def in_order_print(self, node):
76+
# pass
77+
current_node = node
78+
print(current_node.value)
79+
if current_node.right is not None:
80+
self.stack.push(current_node.right)
81+
elif current_node.left is not None:
82+
self.stack.push(current_node.left)
83+
84+
if not self.stack.len():
85+
return
86+
self.in_order_print(self.stack.pop())
87+
88+
# Print the value of every node, starting with the given node,
89+
# in an iterative breadth first traversal
90+
def bft_print(self, node):
91+
# pass
92+
# use a queue data structure
93+
current_node = node
94+
# enqueue the starting node on to the queue
95+
self.queue.enqueue(current_node)
96+
# loop while the queue has data
97+
while self.queue.len() > 0:
98+
# dequeue the current it em off the queue
99+
self.queue.dequeue()
100+
# print the current value
101+
print(current_node)
102+
# if the current node has a left child
103+
if current_node.left:
104+
# enqueue the left child on to the queue
105+
self.queue.enqueue(current_node.left)
106+
# if the current node has a right child
107+
if current_node.right:
108+
# enqueue right child on to the queue
109+
self.queue.enqueue(current_node.right)
110+
111+
# Print the value of every node, starting with the given node,
112+
# in an iterative depth first traversal
113+
def dft_print(self, node):
114+
# pass
115+
# pass
116+
# use a queue data structure
117+
current_node = node
118+
# enqueue the starting node on to the queue
119+
self.stack.push(current_node)
120+
# loop while the queue has data
121+
while self.stack.len() > 0:
122+
# dequeue the current it em off the queue
123+
self.stack.pop()
124+
# print the current value
125+
print(current_node)
126+
# if the current node has a left child
127+
if current_node.left:
128+
# enqueue the left child on to the queue
129+
self.stack.push(current_node.left)
130+
# if the current node has a right child
131+
if current_node.right:
132+
# enqueue right child on to the queue
133+
self.stack.push(current_node.right)
134+
135+
136+
# STRETCH Goals -------------------------
137+
# Note: Research may be required
138+
139+
# Print In-order recursive DFT
140+
def pre_order_dft(self, node):
141+
pass
142+
143+
# Print Post-order recursive DFT
144+
def post_order_dft(self, node):
145+
pass

names/dll_queue.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import sys
2+
sys.path.append('doubly_linked_list')
3+
from doubly_linked_list import DoublyLinkedList
4+
5+
6+
class Queue:
7+
def __init__(self):
8+
self.size = 0
9+
# Why is our DLL a good choice to store our elements?
10+
# self.storage = ?
11+
self.storage = DoublyLinkedList()
12+
13+
def enqueue(self, value):
14+
# pass
15+
# add item to queue
16+
self.size += 1
17+
self.storage.add_to_tail(value)
18+
19+
def dequeue(self):
20+
# pass
21+
# remove item from queue
22+
if self.size > 0:
23+
self.size -= 1
24+
return self.storage.remove_from_head()
25+
else:
26+
return None
27+
28+
def len(self):
29+
# pass
30+
# number of items in queue
31+
if self.size > 0:
32+
return self.size
33+
else:
34+
return 0

names/dll_stack.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from doubly_linked_list import DoublyLinkedList
2+
import sys
3+
sys.path.append('../doubly_linked_list')
4+
5+
class Stack:
6+
def __init__(self):
7+
self.size = 0
8+
# Why is our DLL a good choice to store our elements?
9+
# self.storage = ?
10+
self.storage = DoublyLinkedList()
11+
12+
def push(self, value):
13+
# pass
14+
self.size += 1
15+
self.storage.add_to_tail(value)
16+
17+
def pop(self):
18+
# pass
19+
# remove item from stack
20+
if self.size > 0 and self.size != 0:
21+
self.size -= 1
22+
return self.storage.remove_from_tail()
23+
else:
24+
return None
25+
26+
27+
def len(self):
28+
# pass
29+
# get number of items in stack
30+
if self.size > 0:
31+
return self.size
32+
else:
33+
return 0

0 commit comments

Comments
 (0)