uva 548 - Tree 二叉树重构(中序和后序)+dfs
2016-08-22 10:44
465 查看
题目链接
思路:
后序遍历最后一个字符就是根,据此递归建树,再DFS一下。
思路:
后序遍历最后一个字符就是根,据此递归建树,再DFS一下。
#include<cstring> #include<string> #include<cstdio> #include<cstdlib> #include<iostream> #include<sstream> #include<cmath> #include<algorithm> #include<queue> #include<vector> #include<map> #include<stack> #include<climits> #include<cctype> #include<bitset> #include<set> using namespace std; #define mod 1000000007 #define PI acos(-1.0) #define INF 0x3f3f3f3f typedef long long LL; const int maxv=10005; int in_order[maxv],post_order[maxv],l[maxv],r[maxv]; int n; bool read_list(int* a){ string line; if(!getline(cin,line))return 0; stringstream ss(line); n=0; int x; while(ss>>x)a[n++]=x; return n>0; } int build(int L1,int R1,int L2,int R2){ if(L1>R1)return 0; int root=post_order[R2]; int p=L1; while(in_order[p]!=root)p++; int cnt=p-L1; l[root]=build(L1,p-1,L2,L2+cnt-1); r[root]=build(p+1,R1,L2+cnt,R2-1); return root; } int best,best_sum; void dfs(int u,int sum){ sum+=u; if(!l[u]&&!r[u]){ if(sum<best_sum||(sum==best&&u<best)){ best=u; best_sum=sum; } } if(l[u])dfs(l[u],sum); if(r[u])dfs(r[u],sum);; } int main() { while(read_list(in_order)){ read_list(post_order); build(0,n-1,0,n-1); best_sum=INF; dfs(post_order[n-1],0); cout<<best<<endl; } return 0; }
相关文章推荐
- UVA 548 Tree 中序+后序构造二叉树dfs
- UVa 548 Tree 根据后序遍历和中序遍历建树后DFS
- Tree UVA - 548 已知中序遍历和后序遍历,求这颗二叉树。
- UVA 548 Tree(中序+后序还原二叉树)
- UVa 548 - Tree【二叉树的递归遍历(DFS)】
- uva 548 Tree(通过后序,先序重建树+dfs)
- Uva-548-Tree(二叉树与stream与dfs)
- UVA 548 根据中序和后序建立二叉树并求根到叶的最短路
- UVa - 548 - Tree(从中序和后序恢复二叉树)
- UVA548递归二叉树求路径和和根据中序和后序建立二叉树
- UVA548 Tree(DFS,二叉树)
- Uva548 Tree 【递归建树+dfs遍历树】【例题6-8】
- UVA 548 Tree(数据结构,二叉树,遍历)
- Leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal 中序和后序恢复二叉树
- [LeetCode] 106. Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序遍历建立二叉树
- UVa 548 - Tree 二叉树的重建与遍历
- uva548 Tree +二叉树用中序和后序建树
- LeetCode-Construct Binary Tree from Inorder and Postorder Traversal-中序后序重构二叉树-递归
- UVa 548 Tree【二叉树的递归遍历】
- Leetcode Construct Binary Tree from Inorder and Postorder Traversal 中序后序遍历重组二叉树