博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 548.Tree-fgets()函数读入字符串+二叉树(中序+后序遍历还原二叉树)+DFS or BFS(二叉树路径最小值并且相同路径值叶子节点权值最小)...
阅读量:5041 次
发布时间:2019-06-12

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

Tree 

 

 

题意就是多次读入两个序列,第一个是中序遍历的,第二个是后序遍历的。还原二叉树,然后从根节点走到叶子节点,找路径权值和最小的,如果有相同权值的就找叶子节点权值最小的。

最后输出来叶子节点。

 

一开始写的时候是用gets读入的,报CE,

要用fgets写,关于fgets(),传送门:

 

一开始用bfs过的,后来发现,好多人都是dfs过的,又写了一下dfs。。。

代码:

1 //二叉树的中序和后序遍历还原树并输出最短路径的叶子节点值  2 #include
3 using namespace std; 4 typedef long long ll; 5 const int maxn=1e5+10; 6 const int inf=0x3f3f3f3f; 7 8 struct node{ 9 int l,r,val,father; 10 }tree[maxn]; 11 12 int n=0,minn,leaf; 13 int mid[maxn],beh[maxn]; 14 15 int build(int la,int ra,int lb,int rb) 16 { 17 if(la>ra) return 0; 18 int rt=beh[rb]; 19 int p1=la; 20 while(mid[p1]!=rt) p1++; 21 int p2=p1-la; 22 tree[rt].l=build(la,p1-1,lb,lb+p2-1); 23 tree[rt].r=build(p1+1,ra,lb+p2,rb-1); 24 return rt; 25 } 26 27 /* 28 int fa[maxn]; 29 30 void bfs(int x) 31 { 32 queue
q; 33 vector
vec; 34 q.push(x); 35 fa[x]=0;tree[0].val=0; 36 while(!q.empty()){ 37 int rt=q.front();q.pop(); 38 if(rt==0){ 39 break; 40 } 41 tree[rt].val=tree[fa[rt]].val+rt; 42 // cout<
<

 

转载于:https://www.cnblogs.com/ZERO-/p/10651264.html

你可能感兴趣的文章
时间模块 && time datetime
查看>>
jquery自动生成二维码
查看>>
spring回滚数据
查看>>
新浪分享API应用的开发
查看>>
美国专利
查看>>
【JavaScript】Write和Writeln的区别
查看>>
百度编辑器图片在线流量返回url改动
查看>>
我对你的期望有点过了
查看>>
微信小程序wx:key以及wx:key=" *this"详解:
查看>>
下拉框比较符
查看>>
2.2.5 因子的使用
查看>>
css选择器
查看>>
photoplus
查看>>
Python 拓展之推导式
查看>>
[Leetcode] DP-- 474. Ones and Zeroes
查看>>
80X86寄存器详解<转载>
查看>>
c# aop讲解
查看>>
iterable与iterator
查看>>
返回顶部(动画)
查看>>
webpack+react+antd 单页面应用实例
查看>>