Binary Search Tree: Program to traverse using Postorder recursive approach
Write a program to display the Postorder Traversal of a Binary Search Tree (BST).
The Postorder of a Binary Search Tree is: left subtree, right subtree, root
Applications of Postorder Traversal
1. Postorder traversal is a very important concept in BST as it can be used to solve many Recursion and Dp-related Problems.
2. The Postorder traversal is mainly used to delete the tree.
3. Postorder traversal is also useful to get the postfix expression of a Binary Expression Tree.
Postorder recursive requires two functions
1. postOrder(): The function is used to call the postOrderCallback function and pass root as a parameter
2. postOrderCallback(node): The Main Recursive callback function which uses the below algorithm to traverse and
print the nodes in Postorder.
Algorithm
- If the node is null, return from the function
- Call the postOrderCallback function recursively with the left of the node as a parameter
- Call the postOrderCallback function recursively with the right of the node as a parameter
- Print the data of the node
Complexity
Time Complexity: O(N)
Auxiliary Space Complexity: O(Height of Tree)
The Time Complexity will be O(N) as visit every node once, and the space complexity will be O(Height of Tree)
which is O(logN) for a perfect binary tree, the Space Complexity is because of the stack memory
consumed by the recursive calls.
Java Code
  class BinarySearchTree {
        
        class Node {
          // Node class for Binary Search Tree
          int data;
          Node left, right;
        
          // Constructor to set the value of the node
          Node(int data) {
            this.data = data;
            this.left = null;
            this.right = null;
          }
        }
        
        private Node root = null;
        
        // Function to print the postOrder traversal of the tree
        public void postOrder() {
          // postOrder traversal: left right root
          postOrderCallback(root);
        }
        
        public void postOrderCallback(Node node) {
          // If node is null return
          if (node == null) {
            return;
          }
        
          // Go to the left
          postOrderCallback(node.left);
        
          // Go to the right
          postOrderCallback(node.right);
        
          // Print the value of node
          System.out.print(node.data + " ");
        }
        
        // Insert array of num into the BST
        public void insertArray(int nums[]) {
          for (int i = 0; i < nums.length; i++) {
            insert(nums[i]);
          }
        }
        
        // Insert a value in BST Iteratively
        public void insert(int data) {
          // Check if root is null,
          // if null then create a node and make it root
          if (root == null) {
            root = new Node(data);
            return;
          }
        
          // Start traversing from the root and find the position of node to insert
          Node current = root;
          while (current != null) {
            if (data < current.data) {
              // Insert the node if the position is empty
              if (current.left == null) {
                current.left = new Node(data);
                return;
              }
              current = current.left;
            } else {
              if (current.right == null) {
                // Insert the node if the position is empty
                current.right = new Node(data);
                return;
              }
              current = current.right;
            }
          }
        }
        
        public static void main(String[] args) {
          int[] nums = { 8, 2, 6, 12, 11, 10 };
        
          BinarySearchTree bst = new BinarySearchTree();
          bst.insertArray(nums);
        
          // To check if postOrder is right:
          // Check that if the data is printed in ascending order
          System.out.print("Post Order traversal: ");
          bst.postOrder();
        }
        
   }
Output
Post Order traversal: 6 2 10 11 12 8