# GATE | GATE CS 2020 | Question 15

The preorder traversal of a binary search tree is 15, 10, 12, 11, 20, 18, 16, 19. Which one of the following is the postorder traversal of the tree ? (A) 10, 11, 12, 15, 16, 18, 19, 20 (B) 11, 12, 10, 16, 19, 18, 20, 15 (C) 20, 19, 18, 16, 15, 12, 11, 10 (D) 19, 16, 18, 20, 11, 12, 10, 15

 `// C++ program for finding postorder  ``// traversal of BST from preorder traversal  ``#include   ``using` `namespace` `std;  `` ` `// Function to find postorder traversal from  ``// preorder traversal.  ``void` `findPostOrderUtil(``int` `pre[], ``int` `n, ``int` `minval,  ``                    ``int` `maxval, ``int``& preIndex)  ``{  `` ` `    ``// If entire preorder array is traversed then  ``    ``// return as no more element is left to be  ``    ``// added to post order array.  ``    ``if` `(preIndex == n)  ``        ``return``;  `` ` `    ``// If array element does not lie in range specified,  ``    ``// then it is not part of current subtree.  ``    ``if` `(pre[preIndex] < minval || pre[preIndex] > maxval) {  ``        ``return``;  ``    ``}  `` ` `    ``// Store current value, to be printed later, after  ``    ``// printing left and right subtrees. Increment  ``    ``// preIndex to find left and right subtrees,  ``    ``// and pass this updated value to recursive calls.  ``    ``int` `val = pre[preIndex];  ``    ``preIndex++;  `` ` `    ``// All elements with value between minval and val  ``    ``// lie in left subtree.  ``    ``findPostOrderUtil(pre, n, minval, val, preIndex);  `` ` `    ``// All elements with value between val and maxval  ``    ``// lie in right subtree.  ``    ``findPostOrderUtil(pre, n, val, maxval, preIndex);  `` ` `    ``cout << val << ``" "``;  ``}  `` ` `// Function to find postorder traversal.  ``void` `findPostOrder(``int` `pre[], ``int` `n)  ``{  `` ` `    ``// To store index of element to be  ``    ``// traversed next in preorder array.  ``    ``// This is passed by reference to  ``    ``// utility function.  ``    ``int` `preIndex = 0;  `` ` `    ``findPostOrderUtil(pre, n, INT_MIN, INT_MAX, preIndex);  ``}  `` ` `// Driver code  ``int` `main()  ``{  ``    ``int` `pre[] = { 15, 10, 12, 11, 20, 18, 16, 19 };  `` ` `    ``int` `n = ``sizeof``(pre) / ``sizeof``(pre[0]);  `` ` `    ``// Calling function  ``    ``findPostOrder(pre, n);  ``    ``return` `0;  ``}  `