Skip to content

Commit dac0f0c

Browse files
Added some basic Heap functions, created an expression calculation program, updated stack initialization
1 parent 157ec80 commit dac0f0c

File tree

3 files changed

+117
-34
lines changed

3 files changed

+117
-34
lines changed

Heap.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -78,18 +78,3 @@ def remove(self):
7878
self._sink_down(0)
7979

8080
return max_value
81-
82-
83-
mh = MaxHeap()
84-
mh.insert(95)
85-
mh.insert(75)
86-
mh.insert(80)
87-
mh.insert(55)
88-
mh.insert(60)
89-
mh.insert(50)
90-
mh.insert(65)
91-
print(mh.heap)
92-
mh.remove()
93-
print(mh.heap)
94-
mh.remove()
95-
print(mh.heap)

Math.py

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,27 @@
99

1010

1111
def _calc(v1, v2, operator): # Switch Statements
12-
if operator == '+':
13-
return v1 + v2
14-
if operator == '-':
15-
return v1 - v2
16-
if operator == '*':
17-
return v1 * v2
18-
if operator == '/':
19-
return v1 / v2
20-
if operator == '%':
21-
return v1 % v2
22-
if operator == '**':
23-
return v1 ** v2
24-
if operator == '//':
25-
return v1 // v2
26-
if operator == '++':
27-
return v1 + 1
28-
if operator == '--':
29-
return v1 + 1
30-
return None
12+
match operator:
13+
case '+':
14+
return v1 + v2
15+
case '-':
16+
return v1 - v2
17+
case '*':
18+
return v1 * v2
19+
case '/':
20+
return v1 / v2
21+
case '%':
22+
return v1 % v2
23+
case '**':
24+
return v1 ** v2
25+
case '//':
26+
return v1 // v2
27+
case '++':
28+
return v1 + 1
29+
case '--':
30+
return v1 + 1
31+
case _:
32+
return None
3133

3234

3335
def _calc_expression_stack(expression: Stack) -> int:

Tree.py

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,99 @@ def contains(self, value):
7171
else:
7272
temp = temp.right
7373
return False
74+
75+
def __r_contains(self, current_node, value):
76+
if current_node is None:
77+
return False
78+
if value == current_node.value:
79+
return True
80+
if value < current_node.value:
81+
return self.__r_contains(current_node.left, value)
82+
else:
83+
return self.__r_contains(current_node.right, value)
84+
85+
def r_contains(self, value):
86+
return self.__r_contains(self.root, value)
87+
88+
def __r_insert(self, current_node, value):
89+
if current_node is None:
90+
return Node(value)
91+
if value < current_node.value:
92+
current_node.left = self.__r_insert(current_node.left, value)
93+
elif value > current_node.value:
94+
current_node.right = self.__r_insert(current_node.right, value)
95+
return current_node
96+
97+
def r_insert(self, value):
98+
if self.root is None:
99+
self.root = Node(value)
100+
self.__r_insert(self.root, value)
101+
102+
def min_value(self, current_node):
103+
while current_node.left is not None:
104+
current_node = current_node.left
105+
return current_node.value
106+
107+
def __delete_node(self, current_node, value):
108+
if current_node is None:
109+
return None
110+
if value < current_node.value:
111+
current_node.left = self.__delete_node(current_node.left, value)
112+
elif value > current_node.value:
113+
current_node.right = self.__delete_node(current_node.right, value)
114+
else:
115+
if current_node.left is None and current_node.right is None:
116+
return None
117+
elif current_node.left is None:
118+
current_node = current_node.right
119+
elif current_node.right is None:
120+
current_node = current_node.left
121+
else:
122+
sub_tree_min = self.min_value(current_node.right)
123+
current_node.value = sub_tree_min
124+
current_node.right = self.__delete_node(current_node.right, sub_tree_min)
125+
return current_node
126+
127+
def delete_node(self, value):
128+
self.root = self.__delete_node(self.root, value)
129+
130+
def bfs(self):
131+
current_node = self.root
132+
queue = []
133+
results = []
134+
queue.append(current_node)
135+
while queue:
136+
current_node = queue.pop(0)
137+
results.append(current_node.value)
138+
if current_node.left:
139+
queue.append(current_node.left)
140+
if current_node.right:
141+
queue.append(current_node.right)
142+
return results
143+
144+
def dfs_preorder(self):
145+
results = []
146+
147+
def traverse(current_node):
148+
results.append(current_node.value)
149+
if current_node.left:
150+
traverse(current_node.left)
151+
if current_node.right:
152+
traverse(current_node.right)
153+
154+
traverse(self.root)
155+
return results
156+
157+
def dfs_postorder(self):
158+
pass
159+
160+
161+
bst = BinarySearchTree()
162+
bst.r_insert(47)
163+
bst.r_insert(21)
164+
bst.r_insert(76)
165+
bst.r_insert(18)
166+
bst.r_insert(27)
167+
bst.r_insert(52)
168+
bst.r_insert(82)
169+
print(bst.dfs_preorder())

0 commit comments

Comments
 (0)