题解 | #Problem D#

Problem D

https://www.nowcoder.com/practice/3769e5ca06594e959b4952c75a108aaf

#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

全部评论

相关推荐

jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务