博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT1086 Tree Traversals Again (25)(树的遍历)
阅读量:6595 次
发布时间:2019-06-24

本文共 1370 字,大约阅读时间需要 4 分钟。

题意:

用栈的形式给出一棵树建立的顺序,要求输出后序遍历

思路:

push的顺序就是先序遍历,pop出的顺序就是中序遍历,所以直接用二叉树先序和中序遍历转后序即可。主要记录一下模板

#include
#define inf 0x3f3f3f3fusing namespace std;const int maxn = 10000;vector
inOrder,preOrder,postOrder;stack
tree;/*先序中序转后序*/void post(int root, int left, int right) { if (left > right) return; int i = left; while (i < right&&inOrder[i] != preOrder[root]) i++; post(root+1, left, i - 1); post(root+1+i-left, i + 1, right); postOrder.push_back(preOrder[root]);}int main() { int n; scanf("%d", &n); string s; int num; while(inOrder.size()
> s; if (s[1] == 'u') { scanf("%d", &num); tree.push(num); preOrder.push_back(num); } else { int temp = tree.top(); tree.pop(); inOrder.push_back(temp); } } post(0, 0, n - 1); for (int i = 0; i < n; i++) { if (i == 0) { printf("%d",postOrder[i]); } else { printf(" %d",postOrder[i]); } } return 0;}

后序中序求先序:

#include 
using namespace std;int post[] = {3, 4, 2, 6, 5, 1};int in[] = {3, 2, 4, 1, 6, 5};void pre(int root, int start, int end) { if(start > end) return ; int i = start; while(i < end && in[i] != post[root]) i++; printf("%d ", post[root]); pre(root - 1 - end + i, start, i - 1); pre(root - 1, i + 1, end);}int main() { pre(5, 0, 5); return 0;}

 

转载于:https://www.cnblogs.com/seasonal/p/10343615.html

你可能感兴趣的文章
ES 学习笔记-安装
查看>>
微信支付-H5支付绕过ip地址
查看>>
SpringCloud微服务实战
查看>>
Vue、Typescript 的项目实践
查看>>
JS 事件
查看>>
年终回顾,为你汇总一份「后端架构技术清单」
查看>>
别人的双11 & 程序员的双11~
查看>>
互联网垂直社交创业新形态——ThinkSNS
查看>>
C#中两个冒号(::)的作用
查看>>
sed指定行范围匹配(转贴!)
查看>>
如何在tomcat下用EL表达式${param.xxx}属性获取parameter中文避免乱码
查看>>
线性表之栈与队列
查看>>
Git撤销修改
查看>>
项目管理实施流程(八)系统运维
查看>>
ipv4及ipv6及tcp的头部结构
查看>>
win7图片目录位置
查看>>
Maven
查看>>
FastDFS之集群部署
查看>>
Centos6.3系统语言设置
查看>>
我的友情链接
查看>>