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


Answer: (B)

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program for finding postorder 
// traversal of BST from preorder traversal 
#include <bits/stdc++.h> 
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; 

chevron_right


Code – https://ide.geeksforgeeks.org/t49kAtJwr7

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.