Skip to content

Commit cc8f109

Browse files
author
Mari Wahl
committed
another possibility for binary trees with traversals for generators
1 parent c3cb3f1 commit cc8f109

File tree

2 files changed

+127
-1
lines changed

2 files changed

+127
-1
lines changed

src/trees/binary_tree.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
class Node(object):
77

88
def __init__(self, item=None,):
9-
109
self.item = item
1110
self.left = None
1211
self.right = None
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
#!/usr/bin/env python
2+
3+
__author__ = "bt3"
4+
5+
6+
class Node(object):
7+
def __init__(self, value):
8+
self.value = value
9+
self.right = None
10+
self.left = None
11+
12+
def add(self, value):
13+
new_node = Node(value)
14+
if not self.value:
15+
self.value = new_node
16+
elif not self.left:
17+
self.left= new_node
18+
elif not self. right:
19+
self.right = new_node
20+
else:
21+
self.left = self.left.add(value)
22+
23+
return self # without this, it doesn't add!
24+
25+
def preorder(self):
26+
yield self.value
27+
if self.left:
28+
for node in self.left.preorder():
29+
yield node
30+
if self.right:
31+
for node in self.right.preorder():
32+
yield node
33+
34+
def postorder(self):
35+
yield self.value
36+
if self.left:
37+
for node in self.left.postorder():
38+
yield node
39+
if self.right:
40+
for node in self.right.postorder():
41+
yield node
42+
43+
44+
def inorder(self):
45+
yield self.value
46+
if self.left:
47+
for node in self.left.inorder():
48+
yield node
49+
if self.right:
50+
for node in self.right.inorder():
51+
yield node
52+
53+
54+
# Another possibility: use an array (a little bit more expensive):
55+
def preorder_array(self):
56+
nodes = []
57+
if self.value:
58+
nodes.append(self.value)
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 BT(object):
68+
def __init__(self):
69+
self.root = None
70+
71+
def add(self, value):
72+
if not self.root:
73+
self.root = Node(value)
74+
else:
75+
self.root.add(value)
76+
77+
def preorder(self):
78+
if self.root:
79+
return self.root.preorder()
80+
else:
81+
return 'Tree is empty.'
82+
83+
def inorder(self):
84+
if self.root:
85+
return self.root.inorder()
86+
else:
87+
return 'Tree is empty.'
88+
89+
def postorder(self):
90+
if self.root:
91+
return self.root.postorder()
92+
else:
93+
return 'Tree is empty.'
94+
95+
def preorder_array(self):
96+
if self.root:
97+
return self.root.preorder_array()
98+
else:
99+
return 'Tree is empty.'
100+
101+
102+
103+
if __name__ == '__main__':
104+
tree = BT()
105+
106+
for i in range(1, 11):
107+
tree.add(i)
108+
109+
getree = tree.preorder()
110+
for i in range(10):
111+
print next(getree)
112+
113+
print
114+
115+
print tree.preorder_array()
116+
117+
print
118+
119+
getree = tree.inorder()
120+
for i in range(10):
121+
print next(getree)
122+
123+
print
124+
125+
getree = tree.postorder()
126+
for i in range(10):
127+
print next(getree)

0 commit comments

Comments
 (0)