We discussed about the tree traversal techniques in this post-
Please see pre-order traversal to understand the basics of visiting nodes. We have our same sample tree
Now let us try to understand the In-order traversal. In in-order traversal, the root is traversed between the sub trees. In-order traversal is defined as follows.
- Traverse the left sub-tree
- Visit the node
- Traverse the right sub-tree
So when we apply the in-order traversal on our example tree this will be done as:-
We get the final in-order traversal as:- 4, 2, 5, 1, 6, 3, 7
The recursive version of in-order traversal can be written as:-
void inOrderRecursive(struct binaryTreeNode * root) { if(root) { // In-order traversal of left sub-tree (Step 1) inOrderRecursive(root -> left); // Visit the root (Step 2) printf("%d ", root -> data); // In-order traversal of right sub-tree(Step 3) inOrderRecursive(root -> right); } }
Non-Recursive In-order Traversal
Non-recursive version of In-order traversal us very much similar to Pre-order. The only change is instead of processing the node before going to left sub-tree, process it after popping (which indicates after completion of left sub-tree processing).
void inOrderNonRecursive(struct binaryTreeNode * root) { // Create a new empty stack struct stackNode * S = NULL; // We need to loop until the stack is empty while(1) { // If the root is not null while(root) { // Push the first element onto the stack S = push(S, root); // Go to left sub-tree and keep on adding it to the stack root = root -> left; // (Step 1) } // Check if the stack is empty if(isStackEmpty(S)) break; // else we need to pop out the element root = S -> data; // Remove the element from the stack S = S -> next; // After popping process the current node printf("%d ",root -> data); // Step 2 // After printing, left sub-tree and root have been completed // Go to the right sub-tree root = root -> right; // Step 3 } // We need to delete the stack free(S); }
Time Complexity:- O(n)
Space Complexity:- O(n)
You can download the complete working code here.