G.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef struct BinTree
  4. {
  5. char data;
  6. BinTree* lchild;
  7. BinTree* rchild;
  8. } BinTree;
  9. void RebuildTree(BinTree* &Tree,char *pre,char *in,int len)
  10. {
  11. Tree = new BinTree;
  12. if(Tree!=NULL)
  13. {
  14. if(len<=0)//递归截止条件
  15. {
  16. Tree = NULL;
  17. return ;
  18. }
  19. int index = 0;
  20. while(index<len&&*(pre)!=*(in+index))
  21. {
  22. //寻找当前的root结点(包含子树)
  23. index++;
  24. }
  25. Tree->data = *(pre);
  26. RebuildTree(Tree->lchild,pre+1,in,index);//去掉root结点
  27. RebuildTree(Tree->rchild,pre+1+index,in+1+index,len-(index+1));//去掉左边和根节点
  28. }
  29. return ;
  30. }
  31. void PostOrderTravese(BinTree* Tree)
  32. {
  33. //后序遍历输出
  34. if(Tree==NULL)
  35. return;
  36. PostOrderTravese(Tree->lchild);
  37. PostOrderTravese(Tree->rchild);
  38. cout<<Tree->data;
  39. }
  40. int main()
  41. {
  42. char pre[101]; //string pre;
  43. char in[101]; //string in;
  44. while(cin>>pre>>in)
  45. {
  46. BinTree* tree;
  47. int length = strlen(pre);
  48. RebuildTree(tree,pre,in,length);
  49. PostOrderTravese(tree);
  50. cout<<endl;
  51. }
  52. return 0;
  53. }