UVa 10410树重建】的更多相关文章

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1351 题意:给出bfs和dfs序列,输出每个结点的子节点. 遍历dfs序列,如果当前访问元素为v,它的前面的元素为u,那么在bfs序列中,如果u后面的那个元素不为v的话,那么v肯定是u的子序列,如果为1的话,则v是u的兄弟结点. #include<iostream> #incl…
Tree Reconstruction Problem Description You have just finished a compiler design homework question where you had to find the parse tree of an expression. Unfortunately you left your assignment in the library, but luckily your friend picked it up for…
根据先序历遍和中序历遍输出后序历遍,并不需要真的建树,直接递归解决 #include<cstdio> #include<cstring> ; char preOrder[N]; char midOrder[N]; char S[N]; int top; void solve(char *pre,char *mid,int len)//len>=1 { S[++top] = *pre; char *p = mid; while(*p != *pre) p++; p++; int…
题意: 分析: 这题一开始完全没有思路, 一直没有找出规律. 参考了http://www.cnblogs.com/Wade-/p/6358859.html 和 http://www.cnblogs.com/jerryRey/p/4622927.html 在dfs序列中,相邻的两个结点u,v之间(dfs_pos(u) + 1 =  dfs_pos(v)),有父子,兄弟,其他3种关系. 父子关系:在bfs中u,v并不是相邻, bfs_pos(v) > bfs_pos(u) , 那么u为v父亲, v为…
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回.   解题思路 已知二叉树的前序遍历和中序遍历:PreOrder:         GDAFEMHZInOrder:            ADEFGHMZ我们如何还原这颗二叉树,并求出他的后序遍历? 我们基于一个事实:中序遍历一定是 { 左子树中的节点…
题意:给定一个数字,以及一个描写叙述树的字符序列,问存不存在一条从根到某叶子结点的路径使得其和等于那个数. 难点在于怎样处理字符序列.由于字符间可能有空格.换行等. 思路:本来想着用scanf的(后发现scanf貌似不能做).感觉太麻烦.想看网上有没有处理比較好的,一搜全是用C++的cin流的~  还是自己用C写了一下. 用的getchar().getchar()主要就是比較繁琐.须要一个一个字符比較,记得刚開始做字符串题目时比較喜欢用getchar(),有的用scanf即可的自己也喜欢用get…
树状数组 #include <cstdio> #include <cstdlib> #include <cmath> #include <map> #include <set> #include <stack> #include <vector> #include <sstream> #include <string> #include <cstring> #include <al…
题意: 有一棵树,选出尽可能多的节点是的两两节点不相邻,即每个节点和他的子节点只能选一个.求符合方案的最大节点数,并最优方案判断是否唯一. 分析: d(u, 0)表示以u为根的子树中,不选u节点能得到的最大人数,f(u, 0)表示方案是否唯一. d(u, 1)表示选u节点能得到的最大人数,同理,f(u, 1)表示方案是否唯一. 状态的转移: d(u, 1)的计算:因为选了u节点,所以u的子节点都不能选.d(u, 1) = sum{ d(v, 0) | v是u的子节点 } f(u, 1)的计算:当…
题意: 给定一个树的BFS和DFS,求这棵树. 分析: 拿dfs的序列,分成若干段,每一段相当一个子树,这样就可以利用bfs的序列去将dfs的序列分段,然后利用一个队列去存放每一段,不断求出子树即可. 代码: #include <iostream>#include <cstring>#include <cstdio>#include <vector>#include <algorithm>using namespace std;const int…
是否可以把树上结点的编号,然后把二叉树存储在数组中呢?很遗憾如果结点在一条链上,那将是2^256个结点 所以需要采用动态结构 首先要读取结点,建立二叉树addnode()+read_input()承担这样的工作 然后遍历二叉树,读取结点编号输出bfs() 这道题有内存池应用的背景 附链接  http://blog.csdn.net/shawngucas/article/details/6574863 #include <cstdio> #include <cstring> #inc…