-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbinary_tree.py
111 lines (94 loc) · 2.77 KB
/
binary_tree.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
class Node(object):
summation = []
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def insert(self, value):
if self.value:
if value < self.value:
if self.left is None:
self.left = Node(value)
else:
self.left.insert(value)
elif value > self.value:
if self.right is None:
self.right = Node(value)
else:
self.right.insert(value)
else:
self.value = value
def get_node_values(self):
if self.left:
self.left.get_node_values()
self.summation.append(self.value)
if self.right:
self.right.get_node_values()
return self.summation
def find_a_value(self, value):
if value < self.value:
if self.left is None:
return print("{} not found".format(value))
return self.left.find_a_value(value)
elif value > self.value:
if self.right is None:
return print("{} not found".format(value))
return self.right.find_a_value(value)
else:
print(str(self.value) + ' is found')
"""
Inorder traversal, you visit the left first, then
the root and finally,
the right
"""
def in_order_traversal(self, root):
sum_up = []
if root:
sum_up = self.in_order_traversal(root.left)
sum_up.append(root.value)
sum_up += self.in_order_traversal(root.right)
return sum_up
"""
Preorder traversal, you visit the root first, then
the left and finally,
the right
"""
def pre_order_traversal(self, root):
sum_up = []
if root:
sum_up.append(root.value)
sum_up += self.in_order_traversal(root.left)
sum_up += self.in_order_traversal(root.right)
return sum_up
"""
Postorder traversal, you visit the left first, then
the right and finally,
the root
"""
def post_order_traversal(self, root):
sum_up = []
if root:
sum_up = self.in_order_traversal(root.left)
sum_up += self.in_order_traversal(root.right)
sum_up.append(root.value)
return sum_up
# root = Node(21)
# root.insert(4)
# root.insert(1)
# root.insert(4)
# root.insert(9)
# root.insert(3)
# root.insert(20)
# root.insert(25)
# root.insert(6)
# root.insert(21)
# root.insert(14)
#
# # values = root.get_node_values()
# # print(values)
#
# print(root.in_order_traversal(root))
# print(root.pre_order_traversal(root))
# print(root.post_order_traversal(root))
#
# # root.find_a_value(31)