Inorder traversal is defined as a type of tree traversal technique which follows the Left-Root-Right pattern, such that:
The left subtree is traversed first
Then the root node for that subtree is traversed
Finally, the right subtree is traversed
Consider the following tree:
If we perform an inorder traversal in this binary tree, then the traversal will be as follows:
Step-by-step approach:
Step 1: The traversal will go from 1 to its left subtree i.e., 2, then from 2 to its left subtree root, i.e., 4. Now 4 has no left subtree, so it will be visited. It also does not have any right subtree. So no more traversal from 4
Step 2: As the left subtree of 2 is visited completely, now it read data of node 2 before moving to its right subtree.
Step 3: Now the right subtree of 2 will be traversed i.e., move to node 5. For node 5 there is no left subtree, so it gets visited and after that, the traversal comes back because there is no right subtree of node 5.
Step 4: As the left subtree of node 1 is, the root itself, i.e., node 1 will be visited.
Step 5: Left subtree of node 1 and the node itself is visited. So now the right subtree of 1 will be traversed i.e., move to node 3. As node 3 has no left subtree so it gets visited.
Step 6: The left subtree of node 3 and the node itself is visited. So traverse to the right subtree and visit node 6. Now the traversal ends as all the nodes are traversed.
So the order of traversal of nodes is 4 -> 2 -> 5 -> 1 -> 3 -> 6.
Examples of Inorder Traversal
Input:
Output: BAC
Explanation: The Inorder Traversal visits the nodes in the following order: Left, Root, Right. Therefore, we visit the left node B, then the root node A and lastly the right node C.
Input :
Output: DBEAC
Input: NULL Output: Output is empty in this case.
Algorithm for Inorder Traversal
Inorder(root):
If root is NULL, then return
Inorder (root -> left)
Process root (For example, print root’s data)
Inorder (root -> right)
Python Program to implement Inorder Traversal of Binary Tree
Python
# Structure of a Binary Tree NodeclassNode:def__init__(self,v):self.data=vself.left=Noneself.right=None# Function to print inorder traversaldefprintInorder(node):ifnodeisNone:return# First recur on left subtreeprintInorder(node.left)# Now deal with the nodeprint(node.data,end=' ')# Then recur on right subtreeprintInorder(node.right)# Driver codeif__name__=='__main__':root=Node(1)root.left=Node(2)root.right=Node(3)root.left.left=Node(4)root.left.right=Node(5)root.right.right=Node(6)# Function callprint("Inorder traversal of binary tree is:")printInorder(root)
Output
Inorder traversal of binary tree is:
4 2 5 1 3 6
Time Complexity: O(N) where N is the total number of nodes. Because it traverses all the nodes at least once. Auxiliary Space: O(h) where h is the height of the tree. This space is required for recursion calls.
In the worst case, h can be the same as N (when the tree is a skewed tree)
In the best case, h can be the same as log N (when the tree is a complete tree
We use cookies to ensure you have the best browsing experience on our website. By using our site, you
acknowledge that you have read and understood our
Cookie Policy &
Privacy Policy
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.