UVA 548.Tree-fgets()函数读入字符串+二叉树(中序+后序遍历还原二叉树)+DFS or BFS(二叉树路径最小值并且相同路径值叶子节点权值最小)
Tree UVA - 548
题意就是多次读入两个序列,第一个是中序遍历的,第二个是后序遍历的。还原二叉树,然后从根节点走到叶子节点,找路径权值和最小的,如果有相同权值的就找叶子节点权值最小的。
最后输出来叶子节点。
一开始写的时候是用gets读入的,报CE,
要用fgets写,关于fgets(),传送门:
一开始用bfs过的,后来发现,好多人都是dfs过的,又写了一下dfs。。。
代码:
//二叉树的中序和后序遍历还原树并输出最短路径的叶子节点值
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+;
const int inf=0x3f3f3f3f; struct node{
int l,r,val,father;
}tree[maxn]; int n=,minn,leaf;
int mid[maxn],beh[maxn]; int build(int la,int ra,int lb,int rb)
{
if(la>ra) return ;
int rt=beh[rb];
int p1=la;
while(mid[p1]!=rt) p1++;
int p2=p1-la;
tree[rt].l=build(la,p1-,lb,lb+p2-);
tree[rt].r=build(p1+,ra,lb+p2,rb-);
return rt;
} /*
int fa[maxn]; void bfs(int x)
{
queue<int> q;
vector<int> vec;
q.push(x);
fa[x]=0;tree[0].val=0;
while(!q.empty()){
int rt=q.front();q.pop();
if(rt==0){
break;
}
tree[rt].val=tree[fa[rt]].val+rt;
// cout<<tree[rt].val<<endl;
if(tree[rt].l){
fa[tree[rt].l]=rt;
q.push(tree[rt].l);
}
if(tree[rt].r){
fa[tree[rt].r]=rt;
q.push(tree[rt].r);
}
if(tree[rt].l==0&&tree[rt].r==0){
vec.push_back(rt);
} }
int l=vec.size();
int minn=inf,ans=inf;
for(int i=0;i<l;i++){
if(tree[vec[i]].val<minn){
minn=tree[vec[i]].val;
ans=vec[i];
}
if(tree[vec[i]].val==minn){
if(vec[i]<ans) ans=vec[i];
}
}
printf("%d\n",ans);
}
*/ void dfs(int rt,int sum)
{
sum+=rt;
if(!tree[rt].l&&!tree[rt].r){
if(sum<minn||(sum==minn&&rt<leaf)){
minn=sum;
leaf=rt;
}
}
if(tree[rt].l) dfs(tree[rt].l,sum);
if(tree[rt].r) dfs(tree[rt].r,sum);
} char c[maxn]; int main()
{
while(fgets(c,maxn,stdin)){
int l=strlen(c);
int i=,cnt=;
if(n==){
while(i<l){
if(c[i]=='\0') break;
if(c[i]==' '||c[i]=='\n') i++,mid[++n]=cnt,cnt=;
else{
cnt=cnt*+c[i]-'';
i++;
}
}
}
else{
n=;
while(i<l){
if(c[i]=='\0') break;
if(c[i]==' '||c[i]=='\n') i++,beh[++n]=cnt,cnt=;
else{
cnt=cnt*+c[i]-'';
i++;
}
}
build(,n,,n);
// bfs(beh[n]);
minn=inf,leaf=beh[n];
dfs(beh[n],);
printf("%d\n",leaf);
n=;
}
}
}
UVA 548.Tree-fgets()函数读入字符串+二叉树(中序+后序遍历还原二叉树)+DFS or BFS(二叉树路径最小值并且相同路径值叶子节点权值最小)的更多相关文章
- UVA.548 Tree(二叉树 DFS)
UVA.548 Tree(二叉树 DFS) 题意分析 给出一棵树的中序遍历和后序遍历,从所有叶子节点中找到一个使得其到根节点的权值最小.若有多个,输出叶子节点本身权值小的那个节点. 先递归建树,然后D ...
- uva 548 Tree(通过后序,先序重建树+dfs)
难点就是重建树,指针參数的传递今天又看了看.应该是曾经没全然弄懂.昨天真没效率,还是不太专心啊.以后一定得慢慢看.不能急躁,保持寻常心,. 分析: 通过兴许序列和中序序列重建树,用到了结构体指针.以及 ...
- 【LeetCode-面试算法经典-Java实现】【145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)】
[145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a bin ...
- SDUT-2804_数据结构实验之二叉树八:(中序后序)求二叉树的深度
数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 已知一颗二叉树的中序 ...
- SDUT OJ 数据结构实验之二叉树八:(中序后序)求二叉树的深度
数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...
- 二叉树 遍历 先序 中序 后序 深度 广度 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- UVa 548 Tree【二叉树的递归遍历】
题意:给出一颗点带权的二叉树的中序和后序遍历,找一个叶子使得它到根的路径上的权和最小. 学习的紫书:先将这一棵二叉树建立出来,然后搜索一次找出这样的叶子结点 虽然紫书的思路很清晰= =可是理解起来好困 ...
- UVa 548 Tree(二叉树最短路径)
You are to determine the value of the leaf node in a given binary tree that is the terminal node of ...
- UVa 548 Tree (建树+前序后序)
Description You are to determine the value of the leaf node in a given binary tree that is the termi ...
随机推荐
- 【BZOJ】1700: [Usaco2007 Jan]Problem Solving 解题
[题意]给定n道题,每月末发放工资m,要求从1解到n,每道题需要在当月初付费ai,下月初付费bi,多道题可以安排在同月,求最少月数. [算法]DP [题解]参考自:[bzoj1700]Problem ...
- python学习笔记(九)之字符串
定义字符串 >>> mystring = 'Hello Python' >>> name = str('Mountain') >>> mystri ...
- 用vue快速开发app的脚手架工具
前言 多页面应用于结构较于简单的页面,因为简答的页面使用router又过于麻烦.本脚手架出于这样的场景被开发出来. 使用脚手架搭配Hbuilder也同样可以快速使用vue开发安卓和IOS APP. 本 ...
- poj 2253 Frogger (dijkstra最短路)
题目链接:http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissi ...
- cart回归树算法过程
回归树:使用平方误差最小准则 训练集为:D={(x1,y1), (x2,y2), …, (xn,yn)}. 输出Y为连续变量,将输入划分为M个区域,分别为R1,R2,…,RM,每个区域的输出值分别为: ...
- Python第三方库SnowNLP(Simplified Chinese Text Processing)快速入门与进阶
简介 github地址:https://github.com/isnowfy/snownlp SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的 ...
- ubuntu gnome桌面秀
之前装的是ubuntu14.10gnome版的 然后一路升级成15.04,到今天的15.10 最后发现现在的gnome桌面已经非常适合我的工作了 先放一张图,这是我的桌面 原来使用ubuntu15.0 ...
- CTF线下赛AWD模式下的生存技巧
作者:Veneno@Nu1L 稿费:200RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 原文:https://www.anquanke.com/post/id/8467 ...
- Linux静态库和共享库【转】
转自:http://www.cnblogs.com/zlcxbb/p/6806269.html 1.什么是静态库 静态库类似windows中的静态lib 关于windows中的静态lib,可参考 Wi ...
- ubuntu下virtualbox安装freebsd及初步配置
最近尝试了在虚拟机中安装freebsd并进行尝试性的使用 获取镜像 在freebsd的官网,https://www.freebsd.org,即可看到 "Download Freebsd&qu ...