#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct Node
{
char data;
int Left, Right;
bool Read;
//BNode[Left] or BNode[Right]
Node()
{
Left = Right = -1;
Read = false;
}
}BNode[30];//类哈希
string Mid, Front;
int k = 0;
void Build(int root, int Mid_left, int Mid_right)//no bug
{
if(Mid_left == Mid_right)
return;
int next = Mid.find(Front[k + 1]);//next指下一预定根
if(next > Mid_right || next < Mid_left)//越界
return;
if(next < root)//下一预定根在左子树
{
k++;
BNode[Mid[root] - 'A'].Left = Front[k] - 'A';
Build(next, Mid_left, root - 1);
}
next = Mid.find(Front[k + 1]);
if(next > root)//下一预定根在右子树
{
k++;
BNode[Mid[root] - 'A'].Right = Front[k] - 'A';
Build(next, root + 1, Mid_right);
}
return;
}
void dfs(int now)//bug
{
//前序
if(BNode[now].Left != -1)
dfs(BNode[now].Left);
//中序
if(BNode[now].Right != -1)
dfs(BNode[now].Right);
//后序
if(!BNode[now].Read)
printf("%c", BNode[now].data), BNode[now].Read = true;
return;
}
int main()
{
cin >> Mid >> Front;
for(int i = 0; i < Mid.size(); i++)
if(BNode[Mid[i] - 'A'].data)
BNode[Mid[i] - 'A'].data = Mid[i];
int root = Mid.find(Front[0]);
Build(root, 0, Mid.size() - 1);
dfs(Mid[root] - 'A');
printf("\n");
//system("pause");
//我用vscode写的,环境配的时候必须要写一个pause
return 0;
}
就只是一个奇怪的错误
改了好久了,人晕了,也搞不清错误在哪了