经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
1086 Tree Traversals Again (25 分)(二叉树的遍历)
来源:cnblogs  作者:陈臣12  时间:2018/12/10 9:46:47  对本文有异议

用栈来模拟一棵二叉树的先序遍历和中序遍历过程,求这棵二叉树的后序遍历

由题棵知道:push是先序遍历

                      pop是中序遍历

  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4. vector<int>pre;
  5. vector<int>in;
  6. vector<int>vec;
  7. const int N=50;
  8. int pre1[N];
  9. int in1[N];
  10. void print(int l1,int r1,int l2,int r2)
  11. {
  12. if(l1>r1||l2>r2) return;
  13. int mid=l2;
  14. while(in[mid]!=pre[l1]) mid++;
  15. print(l1+1,l1+mid-l2,l2,mid-1);
  16. print(l1+mid-l2+1,r1,mid+1,r2);
  17. vec.push_back(pre[l1]);
  18. }
  19. int main()
  20. {
  21. int n;
  22. scanf("%d",&n);
  23. stack<int>st;
  24. for(int i=0;i<2*n;i++){
  25. char s[20];
  26. scanf("%s",s);
  27. if(strcmp(s,"Push")==0){
  28. int num;
  29. scanf("%d",&num);
  30. st.push(num);
  31. pre.push_back(num);
  32. }
  33. else{
  34. int t=st.top();
  35. st.pop();
  36. in.push_back(t);
  37. }
  38. }
  39. print(0,n-1,0,n-1);
  40. for(int i=0;i<vec.size();i++){
  41. if(i) printf(" ");
  42. printf("%d",vec[i]);
  43. }
  44. printf("\n");
  45. return 0;
  46. }

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号