uva712 S-Tree (假二叉树重建)
2013-07-26 21:48
369 查看
题意:给定x1 x2 x3 x4......的0 1指派, 根据这些指派得出值真假。怎么得出? x1 ~xn的顺序就是它的深度(看图), 如果是0 往左边走, 1往右边走。 走n步,走到叶子, 叶子是1则真, 是0则假。
思路: 这道题虽然是数据结构题, 但其实用不到树。我们可以根据x1~xn的序列根据它的指派生成它的十进制值index。 然后输出terminal[index]就行了。(terminal是叶子的01序列。注意: 是要根据x1~xn的序列! x1~xn是可以任意排序的。
算法复杂度:o(N)N是指派数。
代码:
思路: 这道题虽然是数据结构题, 但其实用不到树。我们可以根据x1~xn的序列根据它的指派生成它的十进制值index。 然后输出terminal[index]就行了。(terminal是叶子的01序列。注意: 是要根据x1~xn的序列! x1~xn是可以任意排序的。
算法复杂度:o(N)N是指派数。
代码:
#include <cstdio> #include <cstring> using namespace std; #define MAX_N 8 #define MAX_NODE 256 int main() { int order[MAX_N]; char terminal[MAX_NODE]; int n; int cases = 1; while (scanf("%d%*c", &n) == 1 && n) { // init memset(order, 0, sizeof(order)); memset(terminal, 0, sizeof(terminal)); // enter for (int i = n-1; i >= 0; i--) { scanf("%*c%d%*c",order + i); } gets(terminal); // star printf("S-Tree #%d:\n", cases++); int vva; scanf("%d%*c", &vva); for (int i = 0; i < vva; i++) { char strTp[MAX_N]; gets(strTp); int index = 0; for (int j = 0; j < n; j++) { if (strTp[order[j] - 1] == '1') { index |= (1<<j); } } printf("%c", terminal[index]); } printf("\n\n"); } return 0; }
相关文章推荐
- 二叉树重建(Tree Recovery ,UVa536)
- S-Tree解题报告UVa 712二叉树/二分搜索
- UVA 536 Tree Recovery 二叉树重建(重建二叉树+DFS)
- 习题6-3 UVA 536 Tree Recovery 二叉树重建
- UVa 548 - Tree 二叉树的重建与遍历
- UVa-536 习题6-3 二叉树重建(Tree Recovery,ULM 1997)
- 习题6-3 二叉树重建(Tree Recovery, ULM 1997, UVa 536)
- 【UVA 712 S-Tree】& 二叉树
- 二叉树 UVA 548 Tree
- UVA-712 S-Tree
- uva-536 二叉树重建
- UVA 536 - Tree Recovery(二叉树重建)
- 二叉树重建(uva 536)
- UVa - 548 - Tree(从中序和后序恢复二叉树)
- UVA 712 S-Tree
- UVA 536 - Tree Recovery(二叉树重建)
- UVa 712/POJ 1105/ZOJ 1150 S-Trees(用数组模拟二叉树)
- uva 712 S-Tree (S树)模拟
- 二叉树重建 uva 536
- UVA 536 - Tree Recovery(二叉树重建)