Skip to content

Commit 8522057

Browse files
committed
add methods to the binary tree class for convenience while at the same time keeping the flexibility to call those methods outside by passing the root node.
1 parent 749974e commit 8522057

File tree

2 files changed

+48
-31
lines changed

2 files changed

+48
-31
lines changed

binary_tree.py

+32-13
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,26 @@ def __init__(self):
2525
def get_root(self):
2626
return self.root
2727

28+
def insert(self, data):
29+
node = bt_insert(self.root, data)
30+
if self.root == None:
31+
self.root = node
32+
33+
def lookup(self, data):
34+
return bt_lookup(self.root, data)
35+
36+
def delete(self, data):
37+
return bt_delete(self.root, data)
38+
39+
def compare_trees(self, root):
40+
return bt_compare_trees(self.root, root)
41+
42+
def print_tree(self):
43+
bt_print_tree(self.root)
44+
45+
def tree_data(self):
46+
return bt_tree_data(self.root)
47+
2848
def bt_insert(root, data):
2949
"""
3050
Insert new node with data
@@ -59,44 +79,43 @@ def bt_lookup(root, data, parent=None):
5979
else:
6080
return root, parent
6181

62-
def bt_compare_trees(t1, t2):
82+
def bt_compare_trees(root1, root2):
6383
"""
6484
Compare 2 trees
6585
66-
@param t1 tree 1
67-
@param t2 tree 2
86+
@param root1 tree 1 root node
87+
@param root2 tree 2 root node
6888
@returns True if the 2 trees are identical or False
6989
"""
70-
if t1 == None and t2 == None:
90+
if root1 == None and root2 == None:
7191
return True
72-
elif (t1 == None and t2 != None) or (t1 != None and t2 == None):
92+
elif (root1 == None and root2 != None) or (root1 != None and root2 == None):
7393
return False
7494
else:
75-
return (t1.data == t2.data) \
76-
and bt_compare_trees(t1.left, t2.left) \
77-
and bt_compare_trees(t1.right, t2.right)
95+
return (root1.data == root2.data) \
96+
and bt_compare_trees(root1.left, root2.left) \
97+
and bt_compare_trees(root1.right, root2.right)
7898

7999
def bt_print_tree(root):
80100
"""
81-
Print tree content in order
101+
Print tree content inorder
82102
83103
@param root tree root node
84104
"""
85-
if root == None:
86-
pass
87-
else:
105+
if root:
88106
bt_print_tree(root.left)
89107
print root.data,
90108
bt_print_tree(root.right)
91109

92-
def bt_tree_data(node):
110+
def bt_tree_data(root):
93111
"""
94112
Generator to get the tree nodes data
95113
96114
@param node tree root node
97115
"""
98116
# we use a stack to traverse the tree in a non-recursive way
99117
stack = []
118+
node = root
100119
while stack or node:
101120
if node:
102121
stack.append(node)

tests/test_binary_tree.py

+16-18
Original file line numberDiff line numberDiff line change
@@ -8,60 +8,58 @@ def test_binary_tree(self):
88
data = [10, 5, 15, 4, 7, 13, 17, 11, 14]
99
# create 2 trees with the same content
1010
bt = binary_tree.BinaryTree()
11-
root = binary_tree.bt_insert(bt.get_root(), data[0])
12-
for i in data[1:]:
13-
binary_tree.bt_insert(root, i)
11+
for i in data:
12+
bt.insert(i)
1413

1514
bt2 = binary_tree.BinaryTree()
16-
root2 = binary_tree.bt_insert(bt2.get_root(), data[0])
17-
for i in data[1:]:
18-
binary_tree.bt_insert(root2, i)
15+
for i in data:
16+
bt2.insert(i)
1917

2018
# check if both trees are identical
21-
self.assertTrue(binary_tree.bt_compare_trees(root, root2))
19+
self.assertTrue(bt.compare_trees(bt2.get_root()))
2220

2321
# check the content of the tree inorder
2422
t = []
25-
for d in binary_tree.bt_tree_data(root):
23+
for d in bt.tree_data():
2624
t.append(d)
2725
self.assertEquals(t, [4, 5, 7, 10, 11, 13, 14, 15, 17])
2826

2927
# test lookup
30-
node, parent = binary_tree.bt_lookup(root, 9)
28+
node, parent = bt.lookup(9)
3129
self.assertTrue(node == None)
32-
node, parent = binary_tree.bt_lookup(root, 11)
30+
node, parent = bt.lookup(11)
3331
self.assertTrue(node.data == 11)
3432
self.assertTrue(parent.data == 13)
3533

3634
# delete a leaf node
37-
binary_tree.bt_delete(root, 4)
35+
bt.delete(4)
3836
# check the content of the tree inorder
3937
t = []
40-
for d in binary_tree.bt_tree_data(root):
38+
for d in bt.tree_data():
4139
t.append(d)
4240
self.assertEquals(t, [5, 7, 10, 11, 13, 14, 15, 17])
4341

4442
# delete a node with 1 child
45-
binary_tree.bt_delete(root, 5)
43+
bt.delete(5)
4644
# check the content of the tree inorder
4745
t = []
48-
for d in binary_tree.bt_tree_data(root):
46+
for d in bt.tree_data():
4947
t.append(d)
5048
self.assertEquals(t, [7, 10, 11, 13, 14, 15, 17])
5149

5250
# delete a node with 2 childs
53-
binary_tree.bt_delete(root, 13)
51+
bt.delete(13)
5452
# check the content of the tree inorder
5553
t = []
56-
for d in binary_tree.bt_tree_data(root):
54+
for d in bt.tree_data():
5755
t.append(d)
5856
self.assertEquals(t, [7, 10, 11, 14, 15, 17])
5957

6058
# delete a node with 2 childs
61-
binary_tree.bt_delete(root, 15)
59+
bt.delete(15)
6260
# check the content of the tree inorder
6361
t = []
64-
for d in binary_tree.bt_tree_data(root):
62+
for d in bt.tree_data():
6563
t.append(d)
6664
self.assertEquals(t, [7, 10, 11, 14, 17])
6765

0 commit comments

Comments
 (0)