//根据后序遍历和中序遍历,得到层次遍历 bfs
#include<bits/stdc++.h>
using namespace std;
const int maxn=30+5;
int a[maxn],b[maxn],n; //后序遍历 中序遍历
struct node{
int weight;
node* lchild;
node* rchild;
};
node* init(int aL , int aR , int bL , int bR)
{
if(aL > aR) {
return NULL;
}
node* root=new node;
root->weight=a[aR];
int k;
for(k = bL ; k <= bR ; k++)
{
if(b[k] == a[aR]) break;
}
int dis = k - bL;
root->lchild = init(aL , aL + dis -1 , bL ,k-1);
root->rchild = init(aL + dis , aR-1 , k+1 , bR);
return root;
}
int num=0;
void bfs(node* root)
{
queue<node*>pq;
while(!pq.empty()) pq.pop();
pq.push(root);
while(!pq.empty())
{
node* now=pq.front();
pq.pop();
cout<<now->weight;
num++;
if(num<n) cout<<" ";
if(now->lchild!=NULL) {
pq.push(now->lchild);
}
if(now->rchild!=NULL) {
pq.push(now->rchild);
}
}
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
scanf("%d",&b[i]);
//递归建树
node* root=init(0 , n-1 , 0 , n-1);
bfs(root);
return 0;
}
C++中关于.和::和:和->的区别:
1. A.B即A为对象或结构体;
2. A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;
3. ::是作用域运算符,A::B表示作用域A中的名称B,A可以是名字空间、类、结构
4. :一般用来表示继承,也用于三目运算符
#include<bits/stdc++.h>
using namespace std;
bool is_prind(string s)
{
int len=s.length();
for(int i=0;i<len;i++)
if(s[i]!=s[len-1-i]) return false;
return true;
}
string add(string s)
{
char s1[1000];
int len=s.length();
string s2;
s2.clear();
s2=s;
reverse(s2.begin(),s2.end());
int last=0,cnt=0;
for(int i=len-1;i>=0;i--)
{
int k=(s[i]-'0')+(s2[i]-'0')+(last);
if(k>=10) {
last=1;
s1[cnt++]=k-10+'0';
}
else {
last=0;
s1[cnt++]=k+'0';
}
}
if(last) {
s1[cnt++]=last+'0';
}
s1[cnt]='\0';
string s3;
s3.clear();
s3=(string)s1;
reverse(s3.begin(),s3.end());
return s3;
}
int main()
{
char s[20];
int k;
scanf("%s%d",s,&k);
string st;
st.clear();
st=(string)s;
if(is_prind(st)) {
cout<<st<<endl<<"0"<<endl;
return 0;
}
bool flag=false;
string solve;
solve.clear();
int num=0;
solve=st;
for(int i=1;i<=k;i++)
{
string pos;
pos.clear();
pos=add(st);
if(is_prind(pos)) {
flag=true;
}
st.clear();
st=pos;
num=i;
solve.clear();
solve=pos;
if(flag) break;
}
cout<<solve<<endl<<num<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+100;
int main()
{
string a,b;
getline(cin,a,'\n');
getline(cin,b,'\n');
set<char>str;
str.clear();
for(int i=0;i<b.length();i++)
str.insert(b[i]);
char s[maxn];
int cnt=0;
for(int i=0;i<a.length();i++)
{
if(str.count(a[i])==1) {
continue;
}
s[cnt++]=a[i];
}
s[cnt]='\0';
for(int i=0;i<cnt;i++)
{
cout<<s[i];
}
cout<<endl;
return 0;
}