usaco American Heritage
2012-02-14 17:50
351 查看
正常的想法是先通过先序和中序串构造一棵二叉树,然后后序遍历即可
对于先序中的结点x,先通过中序串找到其在中序中的位置i,如果该节点有左子树则vis[i - 1] = true,如果该节点的有右子树则vis[i + 1] = true
!!!传递的参数要用引用类型
对于先序中的结点x,先通过中序串找到其在中序中的位置i,如果该节点有左子树则vis[i - 1] = true,如果该节点的有右子树则vis[i + 1] = true
!!!传递的参数要用引用类型
/* ID: daijinq1 PROB:heritage LANG: C++ */ #include <iostream> #include <sstream> #include <string> #include <cstdio> using namespace std; #define FOR(i,a,b) for(i = (a); i < (b); ++i) #define FORE(i,a,b) for(i = (a); i <= (b); ++i) #define FORD(i,a,b) for(i = (a); i > (b); --i) #define FORDE(i,a,b) for(i = (a); i >= (b); --i) #define CLR(a,b) memset(a,b,sizeof(a)) const int MAXN = 10000; const int MAXM = 0; const int hash_size = 25000002; const int INF = 0x7f7f7f7f; bool vis[30]; string mid_root, fir_root; struct node { char ch; node* left; node* right; }; node* root; void end_root_scan(node* temp_root) { if(temp_root == NULL) return ; end_root_scan(temp_root->left); end_root_scan(temp_root->right); cout<<temp_root->ch; } void create(int &temp_root, node* &root_tree) { // 指针引用 int i; root_tree = new node; root_tree->ch = fir_root[temp_root]; root_tree->left = NULL; root_tree->right = NULL; bool left_sign = false, right_sign = false; for(i = 0; i < (int)mid_root.length(); ++i) if(mid_root[i] == fir_root[temp_root]) { vis[i] = true; break; } if(i > 0 && !vis[i - 1] && temp_root < (int)mid_root.length() - 1) create(++temp_root, root_tree->left); if(i < (int)mid_root.length() - 1 && !vis[i + 1] && temp_root < (int)mid_root.length() - 1) create(++temp_root, root_tree->right); return ; } void input() { cin>>mid_root>>fir_root; int x = 0; create(x, root); end_root_scan(root); cout<<endl; } int main() { freopen("heritage.in", "r", stdin); freopen("heritage.out", "w", stdout); input(); return 0; }
相关文章推荐
- usaco American Heritage
- USACO-Section 3.4 American Heritage (分治)
- USACO Training 3.4.2 American Heritage 题解与分析
- American Heritage usaco
- USACO American Heritage
- 【USACO题库】3.4.2 American Heritage美国血统
- usaco American Heritage
- USACO / American Heritage (经典递归入门)
- USACO American Heritage 解题报告
- American Heritage USACO 3.4 (二叉树前序中序求后序)
- USACO American Heritage
- USACO 3.4 American Heritage美国血统 (树的遍历)
- 【USACO题库】3.4.2 American Heritage美国血统
- JZOJ1294.【USACO题库】3.4.2 American Heritage美国血统
- USACO 3.4 American Heritage
- USACO3.4.2--American Heritage
- USACO 3.4.3 American Heritage
- USACO 3.4 American Heritage
- usaco3.4.1 American Heritage
- usaco--heritage