Open In App

Postorder Traversal of Binary Tree

Last Updated : 21 Oct, 2024
Summarize
Comments
Improve
Suggest changes
Like Article
Like
Share
Report
News Follow

Postorder traversal is defined as a type of tree traversal which follows the Left-Right-Root policy such that for each node:

  • The left subtree is traversed first
  • Then the right subtree is traversed
  • Finally, the root node of the subtree is traversed
How postorder traversal works

Examples of Postorder Traversal

Input:

postorder_traversal_of_binary_tree

Tree Traversal

Output: BCA
Explanation: The Post Order Traversal visits the nodes in the following order: Left, Right, Root. Therefore, we visit the left node B, then the right node C and lastly the root node A.

Input:

postorder_traversal_of_binary_tree_1

Output: DEBCA

Input: NULL
Output:
Explanation: Since the tree has no nodes, output is empty in this case.

Algorithm for Postorder Traversal of Binary Tree:

The algorithm for postorder traversal is shown as follows:

Postorder(root):

  1. If root is NULL then return
  2. Postorder (root -> left)
  3. Postorder (root -> right)
  4. Process root (For example, print(root->data))

Program to implement Postorder Traversal of Binary Tree

Below is the code implementation of the postorder traversal:

C++
// C++ program for postorder traversals

#include <bits/stdc++.h>
using namespace std;

// Structure of a Binary Tree Node
struct Node {
    int data;
    struct Node *left, *right;
    Node(int v)
    {
        data = v;
        left = right = nullptr;
    }
};

// Function to print postorder traversal
void printPostorder(struct Node* node)
{
    if (node == nullptr)
        return;

    // First recur on left subtree
    printPostorder(node->left);

    // Then recur on right subtree
    printPostorder(node->right);

    // Now deal with the node
    cout << node->data << " ";
}

// Driver code
int main()
{
    struct Node* root = new Node(1);
    root->left = new Node(2);
    root->right = new Node(3);
    root->left->left = new Node(4);
    root->left->right = new Node(5);
    root->right->right = new Node(6);

    // Function call
    cout << "Postorder traversal of binary tree is: \n";
    printPostorder(root);

    return 0;
}
C Java Python C# JavaScript

Output
Postorder traversal of binary tree is: 
4 5 2 6 3 1 

Complexity Analysis:

Time Complexity: O(N) where N is the total number of nodes. Because it traverses all the nodes at least once.
Auxiliary Space: O(1) if no recursion stack space is considered. Otherwise, O(h) where h is the height of the tree

  • 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 logN (when the tree is a complete tree)

How does Postorder Traversal of Binary Tree Work?

Consider the following tree:

Example of Binary Tree

Example of Binary Tree

If we perform a postorder traversal in this binary tree, then the traversal will be as follows:

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 subtree, so it will be visited.

Node 4 is visited

Node 4 is visited

Step 2: As the left subtree of 2 is visited completely, now it will traverse the right subtree of 2 i.e., it will move to 5. As there is no subtree of 5, it will be visited.

Node 5 is visited

Node 5 is visited

Step 3: Now both the left and right subtrees of node 2 are visited. So now visit node 2 itself.

Node 2 is visited

Node 2 is visited

Step 4: As the left subtree of node 1 is traversed, it will now move to the right subtree root, i.e., 3. Node 3 does not have any left subtree, so it will traverse the right subtree i.e., 6. Node 6 has no subtree and so it is visited.

Node 6 is visited

Node 6 is visited

Step 5: All the subtrees of node 3 are traversed. So now node 3 is visited.

Node 3 is visited

Node 3 is visited

Step 6: As all the subtrees of node 1 are traversed, now it is time for node 1 to be visited and the traversal ends after that as the whole tree is traversed.

The complete tree is visited

The complete tree is visited

So the order of traversal of nodes is 4 -> 5 -> 2 -> 6 -> 3 -> 1.

Use cases of Postorder Traversal:

Some use cases of postorder traversal are:

  • This is used for tree deletion because we need to delete subtrees before deleting the current node.
  • It is also useful to get the postfix expression from an expression tree.

Related articles:



Next Article
Article Tags :
Practice Tags :

Similar Reads

three90RightbarBannerImg