Pre-order to post-order traversal

后端 未结 11 1515
挽巷
挽巷 2020-12-23 21:56

If the pre-order traversal of a binary search tree is 6, 2, 1, 4, 3, 7, 10, 9, 11, how to get the post-order traversal?

11条回答
  •  南笙
    南笙 (楼主)
    2020-12-23 22:53

    Based on Ondrej Tucny's answer. Valid for BST only
    example:

         20  
        /  \  
       10  30  
       /\    \  
      6  15   35  
    

    Preorder = 20 10 6 15 30 35
    Post = 6 15 10 35 30 20

    For a BST, In Preorder traversal; first element of array is 20. This is the root of our tree. All numbers in array which are lesser than 20 form its left subtree and greater numbers form right subtree.

    //N = number of nodes in BST (size of traversal array)
    int post[N] = {0}; 
    int i =0;
    
    void PretoPost(int pre[],int l,int r){
      if(l==r){post[i++] = pre[l]; return;}
      //pre[l] is root
      //Divide array in lesser numbers and greater numbers and then call this function on them recursively  
      for(int j=l+1;j<=r;j++) 
          if(pre[j]>pre[l])
              break;
      PretoPost(a,l+1,j-1); // add left node
      PretoPost(a,j,r); //add right node
      //root should go in the end
      post[i++] = pre[l]; 
      return;
     }
    

    Please correct me if there is any mistake.

提交回复
热议问题