MakeTree
来源:互联网 发布:手机淘宝官方网站 编辑:程序博客网 时间:2024/06/07 09:05
#include <stdio.h>
#include <string>
char s1[27], s2[27];
char result[27];
int ind1 = 0, ind2 = 0, n = 0;
int len = 0;
int root;
typedef struct _node {
int lnode;
int rnode;
} node_t;
node_t node[27];
int map[2][27];
int ti = 0;
inline void maketree(int root, int n1, int n2, bool blflag = true)
{
int ind = ind1, nn, root1;
if(n1 > n2 || ind1 >= len) return;
while(1) {
nn = (int)&s2[map[0][(int)&s1[ind1] - (int)&s1[0]]] - (int)&s2[0];
if(nn >= n1 && nn <= n2) break;
ind1++;
if(ind1 >= len) return;
}
if(blflag) {
root1 = node[root].lnode = s2[nn] - 'A';
}
else {
root1 = node[root].rnode = s2[nn] - 'A';
}
maketree(root1, n1, nn - 1, true);
maketree(root1, nn + 1, n2, false);
}
inline void traversetree(int root)
{
if(node[root].lnode != -1) traversetree(node[root].lnode);
if(node[root].rnode != -1) traversetree(node[root].rnode);
result[ti++] = root + 'A';
}
int main()
{
while(scanf("%s%s", &s1, &s2) != EOF)
{
ind1 = 0; ti = 0;
len = strlen(s1);
for(int i = 0; i < 27; i++) {node[i].lnode = -1; node[i].rnode = -1;}
for(int i = 0; i < len; i++) {
for(int j = 0; j < len; j++) {
if(s1[i] == s2[j]) {map[0][i] = j; map[1][j] = i; break;}
}
}
root = n = s1[ind1] - 'A';
ind2 = map[0][(int)&s1[ind1] - (int)&s1[0]];
ind1++;
maketree(root, 0, ind2 - 1, true);
maketree(root, ind2 + 1, len, false);
traversetree(root);
result[ti] = 0;
printf("%s\n", result);
}
return 0;
}
- MakeTree
- cocos2d-x节点(CCImage.h)API
- v4l2 编程
- cocos2d-x节点(CCImageCommon_cpp.h)API
- cocos2d-x节点(CCPlatformConfig.h)API
- cocos2d-x节点(CCPlatformMacros.h)API
- MakeTree
- JVM之java栈
- 技术人员谈管理之项目风险规避
- 第13周项目9-求两个数的最大公约数
- DataSet与XML互转,DataSet读取XML文件
- 2-3.socket通信
- windows7共享wifi方法
- @+id/android:list"和"@android:id/list"的写法
- python 计算开平方数