Uva 548 Tree
0.这是一道利用中序遍历和后序遍历确定二叉树的题目,学会建树
关键点理解这段代码
int build(int L1,int R1,int L2,int R2)
{
//printf("built:\n");
;//空树
int root=post_order[R2];
int p=L1;
while(in_order[p] != root) p++;
int cnt = p-L1;//左子树的结点个数
lch[root]=build(L1,p-,L2,L2+cnt-);
rch[root]=build(p+,R1,L2+cnt,R2-);
return root;
}
1.剩下的就是递归了 注意一下递归边界是 到达叶子结点 即左右子树均为空的结点 就行了
if(!lch[v] && !rch[v])
#include <cstdio>
#include <iostream>
#include <cstring>
#include <sstream>
#include <algorithm>
using namespace std;
+ ;
int post_order[maxn],in_order[maxn],lch[maxn],rch[maxn];
int n,ans_sum,ans_v;
bool input(int*a)
{
string s;
//getline(cin,s);
if(!getline(cin,s)) return false;
stringstream ss(s);
n=;
int x;
while(ss>>x) a[n++]=x;
;
}
int build(int L1,int R1,int L2,int R2)
{
//printf("built:\n");
;//空树
int root=post_order[R2];
int p=L1;
while(in_order[p] != root) p++;
int cnt = p-L1;//左子树的结点个数
lch[root]=build(L1,p-,L2,L2+cnt-);
rch[root]=build(p+,R1,L2+cnt,R2-);
return root;
}
void dfs(int v,int sum)
{
sum+=v;
if(!lch[v] && !rch[v])
{
if(sum < ans_sum)
ans_sum = sum,ans_v=v;
else if(sum == ans_sum && v < ans_v)
ans_v = v;
}
if(lch[v]) dfs(lch[v],sum);
if(rch[v]) dfs(rch[v],sum);
}
int main()
{
while(input(in_order))
{
input(post_order);
build(,n-,,n-);
ans_sum=;
dfs(post_order[n-],);
printf("%d\n",ans_v);
}
;
}
Uva 548 Tree的更多相关文章
- UVA.548 Tree(二叉树 DFS)
UVA.548 Tree(二叉树 DFS) 题意分析 给出一棵树的中序遍历和后序遍历,从所有叶子节点中找到一个使得其到根节点的权值最小.若有多个,输出叶子节点本身权值小的那个节点. 先递归建树,然后D ...
- 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 ...
- UVa 548 Tree【二叉树的递归遍历】
题意:给出一颗点带权的二叉树的中序和后序遍历,找一个叶子使得它到根的路径上的权和最小. 学习的紫书:先将这一棵二叉树建立出来,然后搜索一次找出这样的叶子结点 虽然紫书的思路很清晰= =可是理解起来好困 ...
- UVA 548 Tree 建树
题意: 输入中序和后序的权值,输出哪个叶子使它到根的路径上权和最小. 思路: 输入后建树,然后dfs求最小的叶子. #include<iostream> #include<cstdi ...
- uva 548 Tree(通过后序,先序重建树+dfs)
难点就是重建树,指针參数的传递今天又看了看.应该是曾经没全然弄懂.昨天真没效率,还是不太专心啊.以后一定得慢慢看.不能急躁,保持寻常心,. 分析: 通过兴许序列和中序序列重建树,用到了结构体指针.以及 ...
- UVA - 548 Tree(二叉树的递归遍历)
题意:已知中序后序序列,求一个叶子到根路径上权和最小,如果多解,则叶子权值尽量小. 分析:已知中序后序建树,再dfs求从根到各叶子的权和比较大小 #include<cstdio> #inc ...
- UVa 548 Tree(中序遍历+后序遍历)
给一棵点带权(权值各不相同,都是小于10000的正整数)的二叉树的中序和后序遍历,找一个叶子使得它到根的路径上的权和最小.如果有多解,该叶子本身的权应尽量小.输入中每两行表示一棵树,其中第一行为中序遍 ...
- Tree UVA - 548 已知中序遍历和后序遍历,求这颗二叉树。
You are to determine the value of the leaf node in a given binary tree that is the terminal node of ...
随机推荐
- backup daily
#!/bin/bash # #This is a test in book.thanks for Richard Blum. #Please put this file to crontab,than ...
- 【leetcode】Binary Tree Level Order Traversal I & II
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- XML 数据请求与JSON 数据请求
(1)XML 数据请求 使用 AFNetworking 中的 AFHTTPRequestOperation 和 AFXMLParserResponseSerializer,另外结合第三方框架 XMLD ...
- stdafx.h的作用
// stdafx.h : include file for standard system include files,// or project specific include files th ...
- iOS 动态计算文本内容的高度
关于ios 下动态计算文本内容的高度,经过查阅和网上搜素,现在看到的有以下几种方法: 1. // 获取字符串的大小 ios6 - (CGSize)getStringRect_:(NSString* ...
- chaper3_exerise_UVa455_周期串
#include<iostream> #include<cstring> #include<stdio.h> using namespace std; ; int ...
- React Native实例
本文主要包括以下内容 View组件的实例 Text组件实例 Navigator组件实例 TextInput组件实例 View组件的实例 效果如下 代码如下 /** * Sample React Nat ...
- FastPolice项目总结
This is the final homework for spatial information Mobile Service Lesson.It generally inclusived the ...
- phpcms 标签
都说pc标签{pc:content参数名="参数值"参数名="参数值"参数名="参数值"} 但是 参数名对应的具体参数值有那些,菜鸟就不知道 ...
- sdut 487-3279【哈希查找,sscanf ,map】
487-3279 Time Limit: 2000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 题目链接: sdut: http://acm.sdut.ed ...