输入数据:
ABDEFC
DBFEAC
输出数据:
DFEBCA
ABCDEF
#include<iostream>
#include<map>
#include<cstring>
#include<queue>
using namespace std;
struct Node{
char val;
Node*left;
Node* right;
Node(char _val): val(_val),left(nullptr),right(nullptr){
}
};
string inorder,pre,last;
map<char,int>pos;
void dfs(Node* root)
{
if(!root) return ;
dfs(root->left);
dfs(root->right);
cout<<root->val;
}
Node* construct(int pl,int pr,int il, int ir)
{
if(pl>pr) return nullptr;
Node* root=new Node(pre[pl]);
int idx=pos[pre[pl]];
Node*left=construct(pl+1,pl+1+idx-1-il,il,idx-1);
Node* right=construct(pl+idx-il+1,pr,idx+1,ir);
root->left=left;
root->right=right;
return root;
}
void bfs(Node* root)
{
string res="";
queue<Node*>q ;
q.push(root);
while(q.size())
{
Node* t=q.front();q.pop();
res+=t->val;
if(t->left)
{
q.push(t->left);
}
if(t->right)
{
q.push(t->right);
}
}
cout<<res<<endl;
return;
}
int main()
{
cin>>pre>>inorder;
for(int i= 0; i<inorder.size() ; i++) pos[inorder[i]] = i;
Node* root=construct(0,pre.size()-1,0,inorder.size()-1);
dfs(root); //后续遍历
cout<<endl;
bfs(root);//层次遍历
return 0;
}