📜  门| GATE CS 2020 |问题 15

📅  最后修改于: 2021-09-26 03:41:01             🧑  作者: Mango

二叉搜索树的前序遍历是 15, 10, 12, 11, 20, 18, 16, 19. 以下哪一个是树的后序遍历?
(一) 10、11、12、15、16、18、19、20
(乙) 11、12、10、16、19、18、20、15
(C) 20、19、18、16、15、12、11、10
(四) 19、16、18、20、11、12、10、15答案:(乙)
说明:请参考——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[0]); 
  
    // Calling function 
    findPostOrder(pre, n); 
    return 0; 
} 

代码 – https://ide.geeksforgeeks.org/t49kAtJwr7

选项(B)是正确的。这个问题的测验