Registro de tema de competencia de clasificación (2)

texto

L2-004 ¿Es este un árbol de búsqueda binaria?

Tema Descripción

Un árbol de búsqueda binaria se puede definir recursivamente como un árbol binario con las siguientes propiedades: para cualquier nodo,

  • El valor clave de todos los nodos en su subárbol izquierdo es menor que el valor clave de este nodo;
  • El valor clave de todos los nodos en su subárbol derecho es mayor o igual que el valor clave de este nodo;
  • Sus subárboles izquierdo y derecho son árboles de búsqueda binarios.

El llamado "espejo" de un árbol de búsqueda binaria es un árbol que se obtiene invirtiendo las posiciones de los subárboles izquierdo y derecho de todos los nodos.

Dada una secuencia de claves enteras, escriba un programa para determinar si esto es el resultado de un recorrido de orden previo de un árbol de búsqueda binaria o su imagen especular.

de entrada y salida

Formato de entrada y salida

Formato de entrada:
la primera línea de entrada da un número entero positivo N (≤1000). La siguiente línea da N valores de clave enteros separados por espacios.

Formato de salida:
si la secuencia de entrada es el resultado del recorrido previo al pedido de un árbol de búsqueda binaria o su imagen especular, primero emita SÍ en una línea y luego emita el resultado del recorrido posterior al pedido del árbol en la línea siguiente. Debe haber 1 espacio entre los números y no debe haber espacios adicionales al principio y al final de una línea. Si la respuesta es no, salida NO.

Ejemplo de entrada y salida

输入样例 1:
7
8 6 5 7 10 8 11
输出样例 1:
YES
5 7 6 8 11 10 8
输入样例 2:
7
8 10 11 8 6 7 5
输出样例 2:
YES
11 8 10 7 5 6 8
输入样例 3:
7
8 6 8 5 10 9 11
输出样例 3:
NO

idea y codigo

Primero, explicamos el árbol de búsqueda binario reflejado. De hecho, incluso si se cambia la definición del árbol de búsqueda binaria: todos los nodos en el subárbol izquierdo tienen valores mayores o iguales que el valor del nodo raíz, y todos los valores de los nodos en el subárbol derecho son menores que el valor del nodo raíz, y los subárboles izquierdo y derecho también son árboles de búsqueda binarios.

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const ll maxn=1e5+10;
ll a[maxn];
vector<ll> g;
ll flag=0;
ll n;
void getg(ll l,ll r){
    //cout<<l<<" "<<r<<endl;
    if(l>r)return ;
    ll l1=l+1,r1=r;
    if(!flag){
        while(l1<=r&&a[l1]<a[l])l1++;
        while(r1>l&&a[r1]>=a[l])r1--;
    }else{
        while(l1<=r&&a[l1]>=a[l])l1++;
        while(r1>l&&a[r1]<a[l])r1--;
    }
    if(l1-r1!=1)return ;//代表不是前缀序列
    getg(l+1,r1);
    getg(l1,r);
    g.push_back(a[l]);
    return ;

}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    getg(1,n);
    if(g.size()!=n){
        flag=1;
        g.clear();
        getg(1,n);
    }
    if(g.size()==n){
        cout<<"YES"<<endl;
        for(int i=0;i<n-1;i++){
            cout<<g[i]<<" ";
        }
        cout<<g[n-1]<<endl;
    }else{
        cout<<"NO"<<endl;
    }
    return 0;
}

Epílogo


"Si estás indeciso, puedes preguntarle a la brisa primaveral, y si la brisa primaveral no habla, seguirás a tu corazón" significa: si tienes dudas sobre algo, pregúntale a la brisa primaveral cómo hacerlo. . "Si no está decidido, puede preguntarle a la brisa primaveral. Si la brisa primaveral no habla, seguirá su corazón". La oración proviene del "Jianlai" escrito por el escritor de Internet "Fenghuo Opera Princes". El texto original es: "Si estás indeciso, puedes preguntarle a la brisa primaveral. Sigue tu corazón".

inserte la descripción de la imagen aquí


Supongo que te gusta

Origin blog.csdn.net/weixin_46627433/article/details/124302482
Recomendado
Clasificación