新二叉树
由于是先序遍历,所以在读入根节点和左右孩子结点后,可以直接在已经构造的序列里面查找,如果找到了,直接在这个根节点后插入左右孩子结点,如果没找到,就把根节点和左右孩子插到最后
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
char a,b,c; // a:root,b:left,c:right
vector<char> s;
while(t--){
cin>>a>>b>>c;
// 找到root在当前序列中的位置
auto it = find(s.begin(), s.end(), a);
if(it != s.end()){ // root已在序列中,在其后插入左右孩子
if(b!='*')
it = s.insert(it + 1, b);
if(c!='*')
s.insert(it + 1, c);
}
else{ // root是新节点
s.push_back(a);
if(b!='*')
s.push_back(b);
if(c!='*')
s.push_back(c);
}
}
// 输出
for(auto c : s){
cout<<c;
}
return 0;
}
查看17道真题和解析