题解 | #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