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 ...
随机推荐
- iOS微信实现第三方登录的方法
这篇文章主要介绍了iOS微信第三方登录实现的全过程,一步一步告诉大家iOS微信实现第三方登录的方法,感兴趣的小伙伴们可以参考一下 一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2 ...
- ARKit从入门到精通(9)-ARKit让飞机跟着镜头飞起来
1.1-ARKit物体跟随相机移动流程介绍 1.2-完整代码 1.3-代码下载地址 废话不多说,先看效果 1001.gif 1.1-ARKit物体跟随相机移动流程介绍 1.点击屏幕添加物体,已经在第三 ...
- 愿Linux红帽旋风吹得更加猛烈吧!
大约在2000年年初.<中国青年出版社>准备从台湾引进图书(中译本)"Linux红帽旋风"(美国Robert Young),让我为该书写一个前言. 该书作者罗伯特.扬是 ...
- mysql5.5编译安装过程(自己总结)
一,安装过程 //创建mysql安装目录,创建数据存放目录,创建用户和用户组与赋予数据存放目录权限 mkdir -p /usr/local/mysql/ mkdir -p /data/mysql/ g ...
- Android学习记录一——安装环境
一直想接触这块,但是却一直耽搁到现在.找过几回资料,找过几回安装包,这两天受了些刺(gong)激(zi),决定静下心来,一点点开始吃. 接触c#都是从门外汉开始,谈不上任何编程基础,所以接触andro ...
- kubernetes应用部署原理
Kubernetes应用部署模型解析(原理篇) 十多年来Google一直在生产环境中使用容器运行业务,负责管理其容器集群的系统就是Kubernetes的前身Borg.其实现在很多工作在Kubernet ...
- Git 生命周期
在本章中,我们将讨论的Git的生命周期.在后面的章节中,我们将看到的Git命令为每个操作. 一般工作流程是这样的: 克隆Git仓库作为工作副本. 可以添加/编辑文件,修改工作副本. 如果有必要,你还服 ...
- git基本操作:使用git将本地代码上传到GitHub
一.创建github repository(仓库) 1.登录GitHub 创建GitHub仓库,首先需要登录GitHub,GitHub网址:https://github.com.如果没有GitHub账 ...
- v8是怎么实现更快的 await ?深入理解 await 的运行机制
最近v8团队发表一篇博客Faster async functions and promises, 预计在v7.2版本实现更快的异步函数和promise. 文章内容看起来不是很容易理解,背后的原理比较隐 ...
- 看见- 柴静-kindle书摘
笔记本导出 看见 柴静 序 言 标注(黄色) - 位置 3 关心新闻中的人—— 标注(黄色) - 位置 36 二〇〇〇年,我还是湖南卫视“新青年”主持人, 第一章 / 别当了主持人就不是人了 标注(黄 ...