Guest User

Untitled

a guest
Feb 20th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3. char inorder[27];
  4. int size;
  5. char preorder[27];
  6. int mapx[26];//map
  7. class node
  8. {
  9. public:
  10. node()
  11. {
  12. left = NULL;
  13. right = NULL;
  14. }
  15. char c;
  16. node* left;
  17. node* right;
  18.  
  19. };
  20. void postorder(node*);
  21. int ipost;
  22. char post[27];
  23. node* maketree(int ,int);
  24.  
  25. int main()
  26. {
  27.  
  28. ifstream fin("heritage.in");
  29. ofstream fout("heritage.out");
  30. char c;
  31. bool second = false;
  32. int size2 = 0;
  33. while ( (c = fin.get())!=EOF )
  34. {
  35. if (c=='\n')
  36. {
  37. second = true;
  38. continue;
  39. }
  40. if (!second)
  41. {
  42. inorder[size++] = c;
  43. }
  44. else
  45. {
  46. preorder[size2++] = c;
  47. }
  48.  
  49. }
  50. //map the in-order to the index it occurs
  51. for (int i = 0 ; i<size ;i++)
  52. {
  53. mapx[inorder[i]-'A'] = i;
  54.  
  55. }
  56. //make tree
  57. node* root = maketree(0,size-1);
  58.  
  59. //post-order
  60. postorder(root);
  61. post[ipost] = NULL;
  62. fout<<post;
  63. fout<<endl;
  64.  
  65. fin.close();
  66. fout.close();
  67. return 0;
  68. }
  69.  
  70.  
  71. void postorder(node* root)
  72. {
  73.  
  74. if (!root)
  75. return;
  76. postorder(root->left);
  77. postorder(root->right);
  78. post[ipost++]=root->c;
  79. }
  80.  
  81.  
  82. int ppos;
  83. node* maketree(int begin ,int end)
  84. {
  85. if (ppos==size)
  86. return NULL;
  87.  
  88. char c = preorder[ppos++];
  89. if (begin==end&&begin==mapx[c-'A'])
  90. {
  91. node* single = new node();
  92. single->c = c;
  93. return single;
  94. }
  95. else if (mapx[c-'A']>=begin&&mapx[c-'A']<=end)
  96. {
  97. node* root = new node();
  98. root->c = c;
  99. root->left = maketree(begin,mapx[c-'A']-1);
  100.  
  101. root->right = maketree(mapx[c-'A']+1,end);
  102. return root;
  103. }
  104. else
  105. {
  106. ppos--;
  107. return NULL;
  108. }
  109. }
Add Comment
Please, Sign In to add comment