[ACM] 【Árbol binario problem Problema transversal

Corte de línea

Nota: actualización continua

Conocer el orden, ordenar y ordenar

Luogu 1827 origen americano

Código:

#include<bits/stdc++.h>
using namespace std;
void dfs(string xx,string zx){
	if(!xx.size()) return;
	int pos=zx.find(xx[0]);
	dfs(xx.substr(1,pos),zx.substr(0,pos));
	dfs(xx.substr(pos+1),zx.substr(pos+1));
	printf("%c",xx[0]);
}
int main(){
	string xx,zx;
	cin>>zx>>xx;
	dfs(xx,zx);
	printf("\n");
}

Encuentra el preorden en el postorder

Luogu 1030 Buscando orden

Código:

#include<bits/stdc++.h>
using namespace std;
void dfs(string zx,string hx){
	if(!zx.size())return;
	int pos=zx.find(hx[hx.size()-1]);
	printf("%c",zx[pos]);
	dfs(zx.substr(0,pos),hx.substr(0,pos));
	dfs(zx.substr(pos+1),hx.substr(pos,hx.size()-pos-1));
} 
int main(){
	string zx,hx;
	cin>>zx>>hx;
	dfs(zx,hx);
	printf("\n");
}

Encuentre el número de pedidos medios, dado el pedido primero

Problema transversal de Luogu 1229

Código:

Idea: Obviamente, si solo hay un hijo, habrá un desacuerdo de orden medio. Para encontrar el número de nodos con un solo hijo, solo necesita encontrar cuántos pares de letras están uno al lado del otro en el preorden y postorder e intercambiar entre sí. Por ejemplo, ab en el preámbulo y ba en el postámbulo. Obviamente, a tiene un solo hijo b.

#include<bits/stdc++.h>
using namespace std;
int main(){
	char a[400],b[400];
	scanf("%s%s",a,b);
	long long n=0;
	for(int i=0;i<strlen(a)-1;i++)
		for(int j=1;j<strlen(b);j++)
			if(b[j]==a[i]&&a[i+1]==b[j-1]){
				n++;continue;
			}
	printf("%lld\n",1<<n);
}
Publicado 9 artículos originales · ganó 0 · 99 visitas

Supongo que te gusta

Origin blog.csdn.net/weixin_45497996/article/details/105450279
Recomendado
Clasificación