Skip to content

Commit 3a64abc

Browse files
committed
tree data structure
1 parent bc45d0d commit 3a64abc

File tree

8 files changed

+337
-11
lines changed

8 files changed

+337
-11
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
class Node:
2+
def __init__(self, data):
3+
self.data = data
4+
self.left = None
5+
self.right = None
6+
7+
8+
def findMaximum(root):
9+
10+
if root is None:
11+
return 0
12+
13+
else:
14+
15+
maximum = root.data
16+
if root.left:
17+
left_max = findMaximum(root.left)
18+
maximum = max(maximum, left_max)
19+
20+
if root.right:
21+
right_max = findMaximum(root.right)
22+
maximum = max(maximum, right_max)
23+
24+
return maximum
25+
26+
27+
def findMinimum(root):
28+
29+
if root is None:
30+
return 0
31+
32+
else:
33+
34+
minimum = root.data
35+
36+
if root.left:
37+
left_min = findMinimum(root.left)
38+
minimum = min(minimum, left_min)
39+
40+
if root.right:
41+
right_min = findMinimum(root.right)
42+
minimum = min(minimum, right_min)
43+
44+
return minimum
45+
46+
47+
48+
tree = Node(1)
49+
tree.left = Node(2)
50+
tree.right = Node(3)
51+
print('the maximum nodes value is: ')
52+
print(findMaximum(tree))
53+
print('the minimum nodes value is: ')
54+
print(findMinimum(tree))
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Node:
2+
def __init__(self, data):
3+
self.data = data
4+
self.left = None
5+
self.right = None
6+
7+
8+
def height(root):
9+
10+
if root is None:
11+
return 0
12+
13+
else:
14+
15+
return 1 + max(height(root.left), height(root.right))
16+
17+
18+
tree = Node(1)
19+
tree.left = Node(2)
20+
tree.right = Node(3)
21+
tree.left.left = Node(4)
22+
print('the height of the tree: ')
23+
print(height(tree))
24+
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
class Node:
2+
def __init__(self, data):
3+
self.data = data
4+
self.left = None
5+
self.right = None
6+
7+
8+
def inorderTraversal(root):
9+
if root is None:
10+
return None
11+
else:
12+
inorderTraversal(root.left)
13+
print(root.data, end=' ')
14+
inorderTraversal(root.right)
15+
16+
17+
def insertion(root, key):
18+
if not root:
19+
return Node(key)
20+
else:
21+
q = [root]
22+
while len(q):
23+
temp = q.pop(0)
24+
if temp.left is None:
25+
temp.left = Node(key)
26+
return
27+
else:
28+
q.append(temp.left)
29+
if temp.right is None:
30+
temp.right = Node(key)
31+
return
32+
else:
33+
q.append(temp.right)
34+
35+
36+
def deletion(root, key):
37+
if not root:
38+
return None
39+
if root.left is None and root.right is None:
40+
if root.data == key:
41+
return None
42+
else:
43+
return root
44+
else:
45+
key_node = None
46+
q = [root]
47+
while len(q):
48+
temp = q.pop(0)
49+
if temp.data == key:
50+
key_node = temp
51+
if temp.left:
52+
q.append(temp.left)
53+
if temp.right:
54+
q.append(temp.right)
55+
if key_node:
56+
x = temp.data
57+
deletionHelper(root, temp)
58+
key_node.data = x
59+
return root
60+
61+
62+
def deletionHelper(root, d_node):
63+
q = [root]
64+
while len(q):
65+
temp = q.pop(0)
66+
if temp.data is d_node:
67+
temp.data = None
68+
return
69+
if temp.left is d_node:
70+
temp.left = None
71+
return
72+
else:
73+
q.append(temp.left)
74+
if temp.right is d_node:
75+
temp.right = None
76+
return
77+
else:
78+
q.append(temp.right)
79+
80+
81+
tree = None
82+
tree = insertion(tree, 1)
83+
insertion(tree, 2)
84+
insertion(tree, 3)
85+
insertion(tree, 4)
86+
insertion(tree, 5)
87+
insertion(tree, 6)
88+
insertion(tree, 7)
89+
print('the inorder traversal of the tree: ')
90+
inorderTraversal(tree)
91+
print('\n After deletion: ')
92+
deletion(tree, 2)
93+
deletion(tree, 4)
94+
inorderTraversal(tree)
95+
96+
97+
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
class Node:
2+
def __init__(self, data):
3+
self.data = data
4+
self.left = None
5+
self.right = None
6+
7+
8+
def preorderTraversal(root):
9+
if root is None:
10+
return None
11+
else:
12+
print(root.data, end=' ')
13+
preorderTraversal(root.left)
14+
preorderTraversal(root.right)
15+
16+
17+
def invertTree(root):
18+
19+
if root is None:
20+
return None
21+
22+
else:
23+
root.left, root.right = root.right, root.left
24+
25+
root.left = invertTree(root.left)
26+
root.right = invertTree(root.right)
27+
28+
return root
29+
30+
31+
tree = Node(1)
32+
tree.left = Node(2)
33+
tree.right = Node(3)
34+
print('before inverting/mirror_image the tree: ')
35+
preorderTraversal(tree)
36+
invertTree(tree)
37+
print('\n after inverting/mirror_image the tree: ')
38+
preorderTraversal(tree)
39+
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
class Node:
2+
def __init__(self, data):
3+
self.data = data
4+
self.left = None
5+
self.right = None
6+
7+
8+
def left_view(root):
9+
10+
if root is None:
11+
return None
12+
13+
else:
14+
q = [root]
15+
16+
while len(q):
17+
for i in range(1, len(q) + 1): # when the value of i==1 then print the popped node
18+
temp = q.pop(0)
19+
if i == 1:
20+
print(temp.data, end=' ')
21+
if temp.left:
22+
q.append(temp.left)
23+
if temp.right:
24+
q.append(temp.right)
25+
26+
27+
28+
def right_view(root):
29+
30+
if root is None:
31+
return None
32+
33+
else:
34+
q = [root]
35+
36+
while len(q):
37+
for i in range(1, len(q) + 1): # when the value of i==1 then print the popped node
38+
temp = q.pop(0)
39+
if i == 1:
40+
print(temp.data, end=' ')
41+
if temp.right:
42+
q.append(temp.right)
43+
if temp.left:
44+
q.append(temp.left)
45+
46+
47+
tree = Node(1)
48+
tree.left = Node(2)
49+
tree.right = Node(3)
50+
tree.left.left = Node(4)
51+
tree.left.right = Node(5)
52+
print('left view of the tree: ')
53+
left_view(tree)
54+
print('\n right view of the tree: ')
55+
right_view(tree)
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
class Node:
2+
def __init__(self, data):
3+
self.data = data
4+
self.left = None
5+
self.right = None
6+
7+
8+
def levelOrderTraversal(root):
9+
10+
if root is None:
11+
return None
12+
13+
else:
14+
15+
q = [root]
16+
17+
while len(q):
18+
temp = q.pop(0)
19+
print(temp.data, end=' ')
20+
if temp.left:
21+
q.append(temp.left)
22+
if temp.right:
23+
q.append(temp.right)
24+
25+
26+
tree = Node(1)
27+
tree.left = Node(2)
28+
tree.right = Node(3)
29+
tree.left.left = Node(4)
30+
tree.left.right = Node(5)
31+
print('level order traversal: ')
32+
levelOrderTraversal(tree)
33+
34+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
class Node:
2+
def __init__(self, data):
3+
self.data = data
4+
self.left = None
5+
self.right = None
6+
7+
8+
def reverseLevelOrder(root):
9+
if root is None:
10+
return None
11+
else:
12+
q = [root] # queue using array
13+
s = [] # stack using array
14+
15+
while len(q):
16+
temp = q.pop(0)
17+
s.append(temp)
18+
if temp.left:
19+
q.append(temp.left)
20+
if temp.right:
21+
q.append(temp.right)
22+
23+
while len(s):
24+
temp = s.pop()
25+
print(temp.data, end=' ')
26+
27+
28+
tree = Node(1)
29+
tree.left = Node(2)
30+
tree.right = Node(3)
31+
tree.left.left = Node(4)
32+
tree.left.right = Node(5)
33+
print('reverse level order traversal:')
34+
reverseLevelOrder(tree)

Tree_data_structure/tree.py

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)