#include <iostream>
using namespace std;
class node{
public:
char data;
node*left;
node*right;
node(char c){
this->data = c;
right=nullptr;
left=nullptr;
}
};
node* build(string pre,string mid){
if(pre.length()==0)return nullptr;
node* root = new node(pre[0]);
int index = mid.find(root->data);
string leftMid = mid.substr(0,index);
string rightMid = mid.substr(index+1);
string leftPre = pre.substr(1,leftMid.length());
string rightPre = pre.substr(1+leftPre.length());
root->left = build(leftPre,leftMid);
root->right = build(rightPre,rightMid);
return root;
}
void postOrder(node* p){
if(p==nullptr)return;
postOrder(p->left);
postOrder(p->right);
cout<<p->data;
}
int main() {
string pre,mid;
while(cin>>pre>>mid){
node* root = build(pre,mid);
postOrder(root);
cout<<endl;
}
}
// 64 位输出请用 printf("%lld")
用while处理多个输入
substr(pos,len)函数的两个参数:pos表示开始截取的下标,len表示截取长度。
比如string a = "ABCDE";
a.substr(1,3)就表示BCD。如果len+pos超过了字符串的长度不会报错,会自动截取到末尾。
substr有一个重载,只接收一个参数,表示从该位置截取到末尾。
a.substr(2)就表示CDE

京公网安备 11010502036488号