Tree Traversal
Tree Traversal
Traversal is a process to visit all the nodes of a tree and may print their
values too. Because, all nodes are connected via edges (links) we always
start from the root (head) node. That is, we cannot randomly access a node
in a tree. There are three ways which we use to traverse a tree −
In-order Traversal
Pre-order Traversal
Post-order Traversal
In-order Traversal
In this traversal method, the left subtree is visited first, then the root and
later the right sub-tree. We should always remember that every node may
represent a subtree itself.
In the below python program, we use the Node class to create place holders
for the root node as well as the left and right nodes. Then we create a insert
function to add data to the tree. Finally the Inorder traversal logic is
implemented by creating an empty list and adding the left node first
followed by the root or parent node. At last the left node is added to
complete the Inorder traversal. Please note that this process is repeated for
each sub-tree until all the nodes are traversed.
class Node:
self.left = None
self.right = None
self.data = data
# Insert Node
if self.left is None:
self.left = Node(data)
else:
self.left.insert(data)
if self.right is None:
self.right = Node(data)
else:
self.right.insert(data)
else:
self.data = data
def PrintTree(self):
if self.left:
self.left.PrintTree()
print( self.data),
if self.right:
self.right.PrintTree()
# Inorder traversal
res = []
if root:
res = self.inorderTraversal(root.left)
res.append(root.data)
return res
root = Node(27)
root.insert(14)
root.insert(35)
root.insert(10)
root.insert(19)
root.insert(31)
root.insert(42)
print(root.inorderTraversal(root))
Pre-order Traversal
In this traversal method, the root node is visited first, then the left subtree
and finally the right subtree.
In the below python program, we use the Node class to create place holders
for the root node as well as the left and right nodes. Then we create a insert
function to add data to the tree. Finally the Pre-order traversal logic is
implemented by creating an empty list and adding the root node first
followed by the left node. At last the right node is added to complete the
Pre-order traversal. Please note that this process is repeated for each sub-
tree until all the nodes are traversed.
class Node:
self.right = None
self.data = data
# Insert Node
if self.data:
if self.left is None:
self.left = Node(data)
else:
self.left.insert(data)
if self.right is None:
self.right = Node(data)
else:
self.right.insert(data)
else:
self.data = data
def PrintTree(self):
if self.left:
self.left.PrintTree()
print( self.data),
if self.right:
self.right.PrintTree()
# Preorder traversal
res = []
if root:
res.append(root.data)
return res
root = Node(27)
root.insert(14)
root.insert(35)
root.insert(10)
root.insert(19)
root.insert(31)
root.insert(42)
print(root.PreorderTraversal(root))
Post-order Traversal
In this traversal method, the root node is visited last, hence the name. First
we traverse the left subtree, then the right subtree and finally the root
node.
In the below python program, we use the Node class to create place holders
for the root node as well as the left and right nodes. Then we create a insert
function to add data to the tree. Finally the Post-order traversal logic is
implemented by creating an empty list and adding the left node first
followed by the right node. At last the root or parent node is added to
complete the Post-order traversal. Please note that this process is repeated
for each sub-tree until all the nodes are traversed.
class Node:
self.left = None
self.right = None
self.data = data
# Insert Node
if self.data:
if self.left is None:
self.left = Node(data)
else:
self.left.insert(data)
if self.right is None:
self.right = Node(data)
else:
self.right.insert(data)
else:
self.data = data
def PrintTree(self):
if self.left:
self.left.PrintTree()
print( self.data),
if self.right:
self.right.PrintTree()
# Postorder traversal
res = []
if root:
res = self.PostorderTraversal(root.left)
res.append(root.data)
return res
root = Node(27)
root.insert(14)
root.insert(35)
root.insert(10)
root.insert(19)
root.insert(31)
root.insert(42)
print(root.PostorderTraversal(root))
Example Tree
Output:
Preorder traversal of binary tree is
1 2 4 5 3
Inorder traversal of binary tree is
4 2 5 1 3
Postorder traversal of binary tree is
4 5 2 3 1
One more example:
Assignment
https://runestone.academy/runestone/books/published/pythonds/Trees/TreeTraversals.html