博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1710 Binary Tree Traversals
阅读量:5962 次
发布时间:2019-06-19

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

根据一颗二叉树的先序遍历结果和中序遍历结果确定后序遍历结果。

先递归建树,后DFS。代码写了详细的注释~~~~

至今还不会用指针写数据结构。。只会用结构体模拟。。。

 

#include
#include
#include
using namespace std;const int maxn = 1111;struct abc{ int left, right, date;}node[maxn];int xian[maxn], zhong[maxn];int fxian[maxn], fzhong[maxn];int flag[maxn];int ans[maxn];int sum, uu;void gettree(int ll, int rr, int fn)//ll和rr表示的是中序的区间{ int i, maxn = -99999999, minn = 99999999; //minn maxn为中序ll到rr这段区间在先序的区间 for (i = ll; i <= rr; i++) { if (fxian[zhong[i]] > maxn) maxn = fxian[zhong[i]]; if (fxian[zhong[i]] < minn) minn = fxian[zhong[i]]; } //中序ll到rr这段区间的节点为对应的先序序列中的第一个 node[fn].date = xian[minn]; //这段区间的节点在中序的位置 int yy = fzhong[xian[minn]]; //构造左子树 if (yy - ll != 0) { sum++; node[fn].left = sum; gettree(ll, yy - 1, sum); } //构造右子树 if (rr - yy != 0) { sum++; node[fn].right = sum; gettree(yy + 1, rr, sum); }}void dfs(int wei)//后序遍历 先遍历左儿子 再遍历右儿子 最后遍历节点{ //遍历左儿子 if (node[wei].left == -1) flag[node[wei].left] = 1; else { dfs(node[wei].left); if (flag[node[wei].left] == 0) ans[uu] = node[node[wei].left].date, uu++; flag[node[wei].left] = 1; } //遍历右儿子 if (node[wei].right == -1) flag[node[wei].right] = 1; else { dfs(node[wei].right); if (flag[node[wei].right] == 0) ans[uu] = node[node[wei].right].date, uu++; flag[node[wei].right] = 1; } //遍历节点 flag[wei] = 1; ans[uu] = node[wei].date, uu++; }int main(){ int n, i; while (~scanf("%d", &n)) { sum = 1; uu = 0; memset(flag, 0, sizeof(flag)); for (i = 0; i <= maxn - 10; i++) node[i].date = -1, node[i].left = -1, node[i].right = -1; for (i = 1; i <= n; i++) scanf("%d", &xian[i]); for (i = 1; i <= n; i++) scanf("%d", &zhong[i]); for (i = 1; i <= n; i++){fxian[xian[i]] = i; fzhong[zhong[i]] = i;} gettree(1, n, 1); dfs(1); for (i = 0; i < uu; i++) { if (i

 

转载于:https://www.cnblogs.com/zufezzt/p/4442004.html

你可能感兴趣的文章
设计模式学习笔记(七)之模板方法模式(Template Method)
查看>>
我的友情链接
查看>>
主流原型工具可用性测试横向比较
查看>>
我的友情链接
查看>>
Guava——使用Preconditions做参数校验
查看>>
iSCSI存储用作Proxmox VE的LVM共享存储
查看>>
网络营销——关键词竞争度分析
查看>>
Sonnet Suite Pro v11.52-ISO 1CD(三维高频电子设计)
查看>>
Fedora Core 6 刷新率超出范围解决方法
查看>>
linux网络
查看>>
我的友情链接
查看>>
linux 系统调优步骤 例
查看>>
显式方法与隐式方法
查看>>
Android防火墙+流量统计代码
查看>>
通知中心
查看>>
马哥9-3
查看>>
我的友情链接
查看>>
MVC中的三个模块
查看>>
Line: 220 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
查看>>
oracle 常用命令大汇总
查看>>