UVa548_DFS_二叉树(由中序后续确定树并深搜)经典例子
来源:互联网 发布:海马玩模拟器 mac 编辑:程序博客网 时间:2024/05/18 08:15
#include<bits/stdc++.h>using namespace std;const int maxv = 10000+10;int in_order[maxv], post_order[maxv], lch[maxv], rch[maxv];int n;bool read_list(int* a) {string line;if(!getline(cin, line)) return false;stringstream ss(line);n = 0;int x;while(ss >> x) a[n++] = x;// ss -> xreturn n > 0;}//把in_order[L1..R1]和post_order[L2..R2],建成一棵二叉树然后返回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;lch[root] = build(L1, p-1, L2, L2+cnt-1);//左子节点 rch[root] = build(p+1, R1, L2+cnt, R2-1);//右子节点 return root;}int best, best_sum;//目前为止的最优解和对应的权和 void dfs(int u, int sum) {sum+=u;if(!lch[u] && !rch[u]) { //是叶子节点(值为0) if(sum < best_sum || (sum == best_sum && u < best)){best = u; best_sum = sum;} }if(lch[u]) dfs(lch[u], sum);if(rch[u]) dfs(rch[u], sum);}int main(){while(read_list(in_order)){read_list(post_order);build(0, n-1, 0, n-1);best_sum = 1000000000;dfs(post_order[n-1], 0);cout << best << endl;}return 0;}
1 0
- UVa548_DFS_二叉树(由中序后续确定树并深搜)经典例子
- 由中序和后续序列建立二叉树
- 转载-由中序和后续序列建立二叉树
- 二叉树--由中序遍历和后续遍历重建二叉树
- 由二叉树的前序遍历和后续遍历结果还原二叉树,并后序遍历打印
- 由树的前序遍历,中序遍历建立一颗二叉树,并以后续遍历的方式输出其元素
- 由前序遍历和中序遍历重建二叉树,再实现后续遍历
- 由中序遍历序列和后续遍历序列恢复二叉树
- 树和二叉树的应用举例(相似二叉树,由先序和中序、中序和后序确定二叉树)
- 由中序序列和后序序列唯一确定一棵二叉树
- 由中序和后序确定一棵二叉树
- 由前序和中序确定一棵二叉树
- 由中序序列和后序序列唯一确定一棵二叉树
- 给定先序和后续,构造出一颗二叉树并输出中序序列
- 知道后续遍历和中序遍历还原二叉树并求层析遍历
- 根据二叉树的先序与中序序列或后续与中序序列恢复二叉树并图像化打印(c语言)
- 由前序遍历与中序遍历生成二叉树及二叉树的前序,中序,后续,层序遍历
- 已知二叉树的先序(前序)遍历及中序遍历,还原该二叉树并输出其后续遍历
- 字符串单模板匹配学习笔记(一)kmp算法
- 3个骰子求和
- 面向对象 与面向过程的区别?
- 推荐系统导论笔记(五)——Assignment 2
- 散列表ADT_HashTable
- UVa548_DFS_二叉树(由中序后续确定树并深搜)经典例子
- UVA-10003 Cutting Sticks
- I/O指令与通道指令的区别
- Linux网络编程socket错误分析
- Android EditText保留小数点后两位
- AndroidViewPager监听最后的Item和第一个Item
- 1012---SpEL
- Android studio 使用AIDL文件问题
- Mysql导入导出大量数据的方法、备份恢复办法