-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBinary Trees.py
121 lines (84 loc) · 3.01 KB
/
Binary Trees.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
112
113
114
115
116
117
118
119
120
121
#! /usr/bin/python3
"""
Task: Create a binary tree and traverse it in all orders.
"""
class Node(object):
def __init__(self, value):
# Store node's data
self.value = value
# Setup children
self.left = None
self.right = None
class BinaryTree(object):
def __init__(self, root):
# Setup starting node
self.root = Node(root)
def preorder(self, parent, traversal):
# OBJECTIVE: To traverse tree in preorder
# Preorder: Root=>Left=>Right
# Check if node is not empty
if parent is not None:
# Add node's value to string
traversal += "{}-".format(parent.value)
# Make recursive call to the left child
traversal = self.preorder(parent.left, traversal)
# Make recursive call to the right child
traversal = self.preorder(parent.right, traversal)
return traversal
def inorder(self, parent, traversal):
# OBJECTIVE: To traverse tree in inorder
# Inorder: Left=>Root=>Right
# Check if node is not empty
if parent is not None:
# Make a recursive call to left child
traversal = self.inorder(parent.left, traversal)
# Add node's data
traversal += "{}-".format(parent.value)
# Make a recursive call to right child
traversal = self.inorder(parent.right, traversal)
return traversal
def postorder(self, parent, traversal):
# OBJECTIVE: To traverse tree in postorder
# Postorder: Left=>Right=>Root
# Check if node is not empty
if parent is not None:
# Make a recursive call to left child
traversal = self.postorder(parent.left, traversal)
# Make a recursive call to right child
traversal = self.postorder(parent.right, traversal)
# Add node's data to string
traversal += "{}-".format(parent.value)
return traversal
def print_tree(self, traversal_type):
# OBJECTIVE: To print the binary tree in any traversal type
if traversal_type == "preorder":
return self.preorder(tree.root, "")
elif traversal_type == "inorder":
return self.inorder(tree.root, "")
elif traversal_type == "postorder":
return self.postorder(tree.root, "")
# Create tree with root having "initial value"
tree = BinaryTree(1)
# Add children to the root node
tree.root.left = Node(2)
tree.root.right = Node(3)
# Add children to the children
tree.root.left.left = Node(4)
tree.root.left.right = Node(5)
tree.root.right.left = Node(6)
tree.root.left.left.left = Node(7)
tree.root.left.left.right = Node(8)
"""
ILLUSTRATION:
1
/ \
2 3
/ \ /
4 5 6
/ \
7 8
"""
# Print tree
print("Preorder: {}".format(tree.print_tree("preorder")))
print("Inorder: {}".format(tree.print_tree("inorder")))
print("Postorder: {}".format(tree.print_tree("postorder")))