Skip to content

Commit 8aca11b

Browse files
author
bt3
committed
warmup, preparing to give interviews
1 parent b240b35 commit 8aca11b

File tree

4 files changed

+274
-0
lines changed

4 files changed

+274
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/usr/bin/env python
2+
3+
__author__ = "bt3"
4+
5+
6+
def balance_par_str_with_stack(str1):
7+
i, stack = 0, []
8+
9+
while i < len(str1):
10+
symbol = str1[i]
11+
if symbol == "(":
12+
stack.append(symbol)
13+
elif symbol == ")":
14+
stack.pop()
15+
i += 1
16+
return not stack
17+
18+
19+
20+
if __name__ == '__main__':
21+
print(balance_par_str_with_stack('((()))'))
22+
print(balance_par_str_with_stack('(()'))
Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
#!/usr/bin/python
2+
3+
__author__ = "bt3"
4+
5+
from collections import deque
6+
7+
class Node(object):
8+
9+
def __init__(self, item=None):
10+
11+
self.item = item
12+
self.left = None
13+
self.right = None
14+
15+
16+
def _add(self, value):
17+
new_node = Node(value)
18+
if not self.item:
19+
self.item = new_node
20+
else:
21+
if value > self.item:
22+
self.right = self.right and self.right._add(value) or new_node
23+
elif value < self.item:
24+
self.left = self.left and self.left._add(value) or new_node
25+
else:
26+
print("BSTs do not support repeated items.")
27+
return self
28+
29+
30+
def _search(self, value):
31+
if self.item == value:
32+
return True
33+
elif self.left and value < self.item:
34+
return self.left._search(value)
35+
elif self.right and value > self.item:
36+
return self.right._search(value)
37+
else:
38+
return False
39+
40+
41+
def _isLeaf(self):
42+
return not self.right and not self.left
43+
44+
45+
def _printPreorder(self):
46+
print self.item
47+
48+
if self.left:
49+
self.left._printPreorder()
50+
51+
if self.right:
52+
self.right._printPreorder()
53+
54+
55+
def _preorder_array(self):
56+
nodes = []
57+
if self.item:
58+
nodes.append(self.item)
59+
if self.left:
60+
nodes.extend(self.left._preorder_array())
61+
if self.right:
62+
nodes.extend(self.right._preorder_array())
63+
return nodes
64+
65+
66+
67+
class BST(object):
68+
69+
def __init__(self):
70+
self.root = None
71+
72+
def add(self, value):
73+
if not self.root:
74+
self.root = Node(value)
75+
else:
76+
self.root._add(value)
77+
78+
def printPreorder(self):
79+
if self.root:
80+
self.root._printPreorder()
81+
82+
def search(self, value):
83+
if self.root:
84+
return self.root._search(value)
85+
86+
def preorder_array(self):
87+
if self.root:
88+
return self.root._preorder_array()
89+
else:
90+
return 'Tree is empty.'
91+
92+
93+
94+
95+
def BFT(tree):
96+
current = tree.root
97+
nodes = []
98+
queue = deque()
99+
queue.append(current)
100+
101+
while queue:
102+
current = queue.popleft()
103+
nodes.append(current.item)
104+
if current.left:
105+
queue.append(current.left)
106+
if current.right:
107+
queue.append(current.right)
108+
109+
return nodes
110+
111+
112+
def preorder(tree, nodes=None):
113+
nodes = nodes or []
114+
if tree:
115+
nodes.append(tree.item)
116+
if tree.left:
117+
preorder(tree.left, nodes)
118+
if tree.right:
119+
preorder(tree.right, nodes)
120+
return nodes
121+
122+
123+
def postorder(tree, nodes=None):
124+
nodes = nodes or []
125+
if tree:
126+
if tree.left:
127+
nodes = postorder(tree.left, nodes)
128+
if tree.right:
129+
nodes = postorder(tree.right, nodes)
130+
nodes.append(tree.item)
131+
132+
return nodes
133+
134+
135+
def inorder(tree, nodes=None):
136+
nodes = nodes or []
137+
if tree:
138+
if tree.left:
139+
nodes = inorder(tree.left, nodes)
140+
nodes.append(tree.item)
141+
if tree.right:
142+
nodes = inorder(tree.right, nodes)
143+
return nodes
144+
145+
146+
147+
148+
if __name__ == '__main__':
149+
bst = BST()
150+
l = [10, 5, 6, 3, 8, 2, 1, 11, 9, 4]
151+
for i in l:
152+
bst.add(i)
153+
154+
print
155+
print "Searching for nodes 16 and 6:"
156+
print bst.search(16)
157+
print bst.search(6)
158+
159+
print
160+
print 'Traversals:'
161+
print 'Original: ', l
162+
print 'Preorder: ', preorder(bst.root)
163+
print 'Postorder: ', postorder(bst.root)
164+
print 'Inorder: ', inorder(bst.root)
165+
print 'BSF: ', BFT(bst)
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#!/usr/bin/env python
2+
3+
__author__ = "bt3"
4+
5+
6+
class Queue(object):
7+
def __init__(self):
8+
self.enq = []
9+
self.deq = []
10+
11+
def enqueue(self, item):
12+
return self.enq.append(item)
13+
14+
def deque(self):
15+
if not self.deq:
16+
while self.enq:
17+
self.deq.append(self.enq.pop())
18+
return self.deq.pop()
19+
20+
def peak(self):
21+
if not self.deq:
22+
while self.enq:
23+
self.deq.append(self.enq.pop())
24+
if self.deq:
25+
return self.deq[-1]
26+
27+
def size(self):
28+
return len(self.enq) + len(self.deq)
29+
30+
def isempty(self):
31+
return not (self.enq + self.deq)
32+
33+
34+
if __name__ == '__main__':
35+
q = Queue()
36+
for i in range(1,11):
37+
q.enqueue(i)
38+
print 'Size:', q.size()
39+
print 'Is empty?', q.isempty()
40+
print 'Peak: ', q.peak()
41+
print
42+
print 'Dequeuing...'
43+
for i in range(10):
44+
print q.deque()
45+
print 'Size:', q.size()
46+
print 'Is empty?', q.isempty()
47+
print 'Peak: ', q.peak()
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
2+
#!/usr/bin/env python
3+
4+
__author__ = "bt3"
5+
6+
7+
class Stack(object):
8+
def __init__(self):
9+
self.content = []
10+
11+
def push(self, value):
12+
self.content.append(value)
13+
14+
def pop(self):
15+
if self.content:
16+
return self.content.pop()
17+
else:
18+
return 'Empty List. '
19+
20+
def size(self):
21+
return len(self.content)
22+
23+
def isEmpty(self):
24+
return not bool(self.content)
25+
26+
def peek(self):
27+
if self.content:
28+
return self.content[-1]
29+
else:
30+
print('Stack is empty.')
31+
32+
33+
34+
if __name__ == '__main__':
35+
q = Stack()
36+
37+
for i in range(10):
38+
q.push(i)
39+
for i in range(11):
40+
print q.pop()

0 commit comments

Comments
 (0)