uva 548 Tree(通过后序,先序重建树+dfs)
难点就是重建树,指针參数的传递今天又看了看。应该是曾经没全然弄懂。昨天真没效率,还是不太专心啊。以后一定得慢慢看。不能急躁,保持寻常心,。
分析:
通过兴许序列和中序序列重建树,用到了结构体指针。以及他们的參数传递,之后深度优先遍历就能够了,
找到从根节点到叶节点和最低小的时候叶子节点的值,好像数据比較弱,没有负数,也没考虑当有多种路径的时候输出
最小的叶子节点。
。
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<limits.h>
char a[1000005];
char b[1000005];
int c[100005];
int d[100005];
int s1,s2;
int res = INT_MAX;
int ans;
typedef struct Tnode
{
int data;
struct Tnode *lchild;
struct Tnode *rchild;
}*node;
void build(int *a1, int *b1, int len,node &T)//重建二叉树。这里的&符号是引用的意思,c++里面内容
{
if(len <= 0 )
{
T = NULL;
return ;
}
int k;
for(int *p = a1; p < a1+len; p++)
{
if(*(b1+len-1) == *p)// 后序序列中最后一个数字就是根节点
{
k = p-a1;
T = (node )malloc(sizeof(Tnode)); //必须开内存才干够赋值。。。 T -> data = *p;
//T -> lchild = NULL;
// T -> rchild = NULL;
break;
}
}
build(a1, b1, k, T->lchild);
build(a1+k+1, b1+k, len-k-1, T->rchild);
return;
}
void init()
{
memset(a,'\0',sizeof(a));
memset(b,'\0',sizeof(b));
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
}
void input()//处理输入
{
int sum = 0;
int lena = strlen(a);
int lenb = strlen(b);
s1 = s2 = 0;
for(int i=0; i<lena; i++)
{
if(a[i]==' ')
{
c[s1++] = sum;
sum = 0;
}
else
{
sum = sum*10 + a[i]-'0';
}
}
c[s1++] = sum;
sum =0;
for(int i=0; i<lenb; i++)
{
if(b[i]==' ')
{
d[s2++] = sum;
sum = 0;
}
else
{
sum = sum*10 + b[i]-'0';
}
}
d[s2++] = sum;
return ;
}
void dfs(node T, int cur)//深度优先搜索,每次遍历到根节点
{
if(T)
{
cur+=T->data;
if(!T->lchild&&!T->rchild)
{
if(cur < res)
{
res = cur;
ans = T->data;
}
return;
}
if(T->lchild)
dfs(T->lchild,cur);
if(T->rchild)
dfs(T->rchild,cur);
}
return;
}
int main()
{
int i;
while(gets(a))
{
gets(b);
input();
res = INT_MAX;
/* for(i=0; i<s1; i++)
printf("%d ",c[i]);
printf("\n");
for(i=0; i<s2; i++)
printf("%d ",d[i]);
puts("");
}*/
node T;
build(c,d,s1,T);
dfs(T,0);
// printf("%d %d\n",res,ans);
printf("%d\n",ans);
init();
}
return 0;
}
uva 548 Tree(通过后序,先序重建树+dfs)的更多相关文章
- UVA.548 Tree(二叉树 DFS)
UVA.548 Tree(二叉树 DFS) 题意分析 给出一棵树的中序遍历和后序遍历,从所有叶子节点中找到一个使得其到根节点的权值最小.若有多个,输出叶子节点本身权值小的那个节点. 先递归建树,然后D ...
- UVA - 548 Tree(二叉树的递归遍历)
题意:已知中序后序序列,求一个叶子到根路径上权和最小,如果多解,则叶子权值尽量小. 分析:已知中序后序建树,再dfs求从根到各叶子的权和比较大小 #include<cstdio> #inc ...
- UVa 548 Tree (建树+前序后序)
Description You are to determine the value of the leaf node in a given binary tree that is the termi ...
- UVa 548 Tree(中序遍历+后序遍历)
给一棵点带权(权值各不相同,都是小于10000的正整数)的二叉树的中序和后序遍历,找一个叶子使得它到根的路径上的权和最小.如果有多解,该叶子本身的权应尽量小.输入中每两行表示一棵树,其中第一行为中序遍 ...
- 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
0.这是一道利用中序遍历和后序遍历确定二叉树的题目,学会建树 关键点理解这段代码 int build(int L1,int R1,int L2,int R2) { //printf("bui ...
- UVa 548 Tree【二叉树的递归遍历】
题意:给出一颗点带权的二叉树的中序和后序遍历,找一个叶子使得它到根的路径上的权和最小. 学习的紫书:先将这一棵二叉树建立出来,然后搜索一次找出这样的叶子结点 虽然紫书的思路很清晰= =可是理解起来好困 ...
- UVA 548 Tree 建树
题意: 输入中序和后序的权值,输出哪个叶子使它到根的路径上权和最小. 思路: 输入后建树,然后dfs求最小的叶子. #include<iostream> #include<cstdi ...
- Tree UVA - 548 已知中序遍历和后序遍历,求这颗二叉树。
You are to determine the value of the leaf node in a given binary tree that is the terminal node of ...
随机推荐
- html5 class
指向样式表中的类比如<span class="left_menu important">...</span>表示这个span的样式,由样式表中的left_m ...
- UEFI格式预装win8安装win7
如果本本预装的是win8,而且是较新款的机型,那么当你想要格掉win8,装win7系统时就会遇到问题.主要有两个: 1)安装win7时,笔记本无法识别系统光盘或u盘启动盘 ,提示:屏幕显示“image ...
- Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io .nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)V
首先,遇到这个问题的一个原因是windows环境中没有配置hadoophome.配置之后加入winutils工具 第二个原因,pom中执行的hadoop的版本与window环境中的hadoop的版本不 ...
- 未能加载文件或程序集“System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。系统找不到指定的文件。
问题:WPF未能加载文件或程序集"System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ...
- JS压缩工具配置
1.打开文件夹 修改yui.reg 里面修改为自己的目录. 2.yuicompressor.bat 修改SET YUIFOLDER=E:\JS常用工具\JS_compres\build 为自己的目录
- Linux下LDAP统一认证解决方案
Linux下LDAP统一认证解决方案 --http://www.cangfengzhe.com/wangluoanquan/3.html 转自:http://www.cnblogs.com/MYSQL ...
- bower failed: UNABLE_TO_VERIFY_LEAF_SIGNATURE
.bowerrc配置 { "strict-ssl": false }
- 如何在CentOS 6.5上升级PHP
CentOS 6.5上默认安装PHP 5.3.因为后台网站无法正确运行在PHP 5.3上,所以计划将PHP升级到开发平台一样的版本PHP 5.5.为了方便,我们采用YUM的方式升级PHP 工具/原料 ...
- hazelcast初探
Hazelcast作为一个高度可扩展的数据分发和集群平台,提供了高效的.可扩展的分布式数据存储.数据缓存.Hazelcast是开源的,在分布式技术方面,Hazelcast提供了十分友好的接口供开发者选 ...
- 【程序练习】——ini格式转换为xml格式
;Configuration of http [http] doamin=www.mysite.com port= cgihome=/cgi-bin ;Configuration of db [d ...