fork download
  1. /*
  2.  * File: bstfrompostorder.c
  3.  * Author: srkrishnan
  4.  *
  5.  * Created on June 30, 2011, 8:29 PM
  6.  */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10.  
  11. typedef struct Tnode {
  12. int data;
  13. struct Tnode *left;
  14. struct Tnode *right;
  15. } Tnode;
  16.  
  17. Tnode* createtreenode(int data)
  18. {
  19. Tnode *n=(Tnode*)malloc(sizeof(Tnode));
  20. n->left=NULL;
  21. n->right=NULL;
  22. n->data=data;
  23. return n;
  24. }
  25.  
  26. Tnode *constructBSTfrompostorder(Tnode *root,int a[],int n)
  27. {
  28. int i=0;
  29. Tnode *t=NULL;
  30. for(i=n-1;i>=0;i--)
  31. {
  32. t=root;
  33. if(root==NULL)
  34. {
  35. root=createtreenode(a[i]);
  36. continue;
  37. }
  38. while(root!=NULL)
  39. {
  40. if(a[i]>root->data)
  41. {
  42. if(root->right==NULL)
  43. {
  44. root->right=createtreenode(a[i]);
  45. break;
  46. }
  47. root=root->right;
  48. }
  49. else
  50. {
  51. if(root->left==NULL)
  52. {
  53. root->left=createtreenode(a[i]);
  54. break;
  55. }
  56. root=root->left;
  57. }
  58. }
  59. root=t;
  60. }
  61. return root;
  62. }
  63.  
  64. void postorder(Tnode *root)
  65. {
  66. if(root==NULL)
  67. return;
  68. postorder(root->left);
  69. postorder(root->right);
  70. printf("%d,",root->data);
  71. }
  72.  
  73. int main(int argc, char** argv) {
  74.  
  75. Tnode *root=NULL;
  76.  
  77. /*root = createtreenode(15);
  78.  
  79.   root->left = createtreenode(7);
  80.   root->right = createtreenode(25);
  81.  
  82.   root->left->left = createtreenode(3);
  83.   root->left->right = createtreenode(10);
  84.  
  85.   root->right->left = NULL;
  86.   root->right->right = createtreenode(50);
  87.  
  88.   root->left->right->left = createtreenode(8);
  89.   root->left->right->right = createtreenode(12);
  90.  
  91.   root->left->right->left->left = NULL;
  92.   root->left->right->left->right = createtreenode(9);
  93.  
  94.   root->left->right->right->left = createtreenode(11);
  95.   root->left->right->right->right = createtreenode(14);
  96.  
  97.   root->right->right->left = createtreenode(30);
  98.   root->right->right->right = createtreenode(55);
  99.  
  100.   root->right->right->right->left = createtreenode(52);
  101.   root->right->right->right->right = NULL;*/
  102.  
  103. //postorder(root);
  104.  
  105. int a[]={3,9,8,11,14,12,10,7,30,52,55,50,25,15};
  106. root=constructBSTfrompostorder(root,a,14);
  107. postorder(root);
  108. return (EXIT_SUCCESS);
  109. }
  110.  
Success #stdin #stdout 0s 1852KB
stdin
Standard input is empty
stdout
3,9,8,11,14,12,10,7,30,52,55,50,25,15,