# 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

Explanation: Please refer – Find postorder traversal of BST from preorder traversal

 `// 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);  ` ` `  `    ``// Calling function  ` `    ``findPostOrder(pre, n);  ` `    ``return` `0;  ` `}  `

Option (B) is correct.

Quiz of this Question

My Personal Notes arrow_drop_up
Article Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.