8000 Added projects folder for section 17, including code samples for a qu… · DORELAS/complete-python-course@c528955 · GitHub
[go: up one dir, main page]

Skip to content

Commit c528955

Browse files
committed
Added projects folder for section 17, including code samples for a queue, stack, and binary tree.
Also added PDFs for datetime and milestone project 2.
1 parent 958a046 commit c528955

File tree

7 files changed

+106
-0
lines changed

7 files changed

+106
-0
lines changed

section10/Datetime cheatsheet.pdf

500 KB
Binary file not shown.

section17/projects/binary_tree/app.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from btree import BinaryTree
2+
from node import Node
3+
4+
tree = BinaryTree(Node('Paco', 6))
5+
6+
nodes = [
7+
('Jose', 5),
8+
('Rolf', 3),
9+
('Anne', 7),
10+
('Charlie', 11),
11+
('Jen', 2)
12+
]
13+
14+
for n in nodes:
15+
tree.add(Node(*n))
16+
17+
tree.flatten()
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from node import Node
2+
3+
class BinaryTree:
4+
def __init__(self, head: Node):
5+
self.head = head
6+
7+
def add(self, node: Node):
8+
current_node = self.head
9+
while current_node:
10+
if node.value == current_node.value:
11+
raise ValueError("A node with that value already exists.")
12+
elif node.value > current_node.value:
13+
if current_node.right:
14+
current_node = current_node.right
15+
else:
16+
current_node.right = node
17+
break
18+
else:
19+
if current_node.left:
20+
current_node = current_node.left
21+
else:
22+
current_node.left = node
23+
break
24+
25+
def find(self, value: int):
26+
current_node = self.head
27+
while current_node:
28+
if value == current_node.value:
29+
return current_node
30+
elif value > current_node.value:
31+
current_node = current_node.right
32+
else:
33+
current_node = current_node.left
34+
raise LookupError("A node with value {} was not found.".format(value))
35+
36+
def flatten(self):
37+
self._flatten_recursive(self.head)
38+
39+
def _flatten_recursive(self, current_node):
40+
if not current_node:
41+
return
42+
self._flatten_recursive(current_node.left)
43+
print(current_node)
44+
self._flatten_recursive(current_node.right)
45+
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Node:
2+
def __init__(self, name, value, left=None, right=None):
3+
self.name = name
4+
self.value = value
5+
self.left = left
6+
self.right = right
7+
8+
def __repr__(self):
9+
return f'<Node {self.name}, {self.value}>'

section17/projects/samples/queue.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Queue:
2+
def __init__(self):
3+
self.items = []
4+
5+
def push(self, e):
6+
self.items.append(e)
7+
8+
def pop(self):
9+
head = self.items[0]
10+
self.items = self.items[1:]
11+
return head
12+
13+
q = Queue()
14+
q.push(5) # [5]
15+
q.push(7) # [5, 7]
16+
q.push(11) # [5, 7, 11]
17+
print(q.pop()) # returns 5, left is [7, 11]
18+
print(q.pop()) # returns 7, left is [11]

section17/projects/samples/stack.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Stack:
2+
def __init__(self):
3+
self.items = []
4+
5+
def push(self, e):
6+
self.items = [e] + self.items
7+
8+
def pop(self):
9+
return self.items.pop()
10+
11+
12+
s = Stack()
13+
s.push(5) # [5]
14+
s.push(7) # [7, 5]
15+
s.push(11) # [11, 7, 5]
16+
print(s.pop()) # returns 11, left is [7, 5]
17+
print(s.pop()) # returns 7, left is [5]
552 KB
Binary file not shown.

0 commit comments

Comments
 (0)
0