L3-016 Estructura de árbol de búsqueda binaria (30 puntos)

El árbol de búsqueda binario es un árbol vacío o un árbol binario con las siguientes propiedades: Si su subárbol izquierdo no está vacío, los valores de todos los nodos en el subárbol izquierdo son menores que el valor de su nodo raíz; si es Si el subárbol derecho de no está vacío, los valores de todos los nodos en el subárbol derecho son mayores que el valor de su nodo raíz; sus subárboles izquierdo y derecho también son árboles de búsqueda binarios. (De la enciclopedia Baidu)

Dada una serie de números enteros que no son iguales entre sí, insértelos secuencialmente en un árbol de búsqueda binario inicialmente vacío y luego describa la estructura del árbol de resultados. Debe poder juzgar si la descripción proporcionada es correcta. Por ejemplo, después de insertar {2 4 1 3 0}, se obtiene un árbol de búsqueda binario, la declaración como "2 es la raíz del árbol", "1 y 4 son nodos hermanos", "3 y 0 están en el mismo nivel "(Refiriéndose a la misma profundidad de arriba a abajo)," 2 es el nodo principal de 4 "," 3 es el hijo izquierdo de 4 "son todos correctos;" 4 es el hijo izquierdo de 2 "," 1 y 3 son hermanos "Nodos" son todos incorrectos.

Formato de
entrada : ingrese un entero positivo N (≤100) en la primera línea y N números enteros diferentes en la siguiente línea, separados por espacios, y es necesario insertarlos en secuencia en un árbol de búsqueda de dos bifurcaciones inicialmente vacío. Luego se da un entero positivo M (≤100), seguido de M líneas, cada línea da una declaración para ser juzgada. Hay 6 tipos de oraciones declarativas:

A es la raíz, es decir, "A es la raíz del árbol";
A y B son hermanos, es decir, "A y B son nodos hermanos";
A es el padre de B, es decir, "A es el nodo padre de B ";
A es el hijo izquierdo de B, es decir," A es el hijo izquierdo de B ";
A es el hijo derecho de B, es decir," A es el hijo derecho de B ";
A y B están en el mismo nivel, es decir, "A y B están en el mismo piso".
La pregunta garantiza que todos los enteros dados están dentro del rango de enteros.

Formato de salida:
para cada declaración, la salida Sí si es correcta, de lo contrario la salida No, cada oración ocupa una línea.

Ejemplo de entrada:
5
2 4 1 3 0
8
2 es la raíz
1 y 4 son hermanos
3 y 0 están en el mismo nivel
2 es el padre de 4
3 es el hijo izquierdo de 4
1 es el hijo derecho de 2
4 y 0 están en el mismo nivel
100 es el hijo correcto de 3
Ejemplo de salida:





No
No
No
explotará el espacio, solo use el almacenamiento unidimensional directamente

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n,t,tt,root;
map<int,int>l,r,fa,depth,b;
string s; 
void inser(int x,int v,int dep)
{
    
    
	if(v<x)
	{
    
    
		if(l[x]==-1) 
		 fa[v]=x,l[x]=v,depth[v]=dep;
		else inser(l[x],v,dep+1);
	}
	else
	{
    
    
		if(r[x]==-1) 
		 fa[v]=x,depth[v]=dep,r[x]=v;
		else inser(r[x],v,dep+1);
	}
}
int main()
{
    
    
 ios::sync_with_stdio(false);
 cin>>n;
 cin>>root;
 fa[root]=-1;b[root]=1;l[root]=-1;r[root]=-1;
 for(int i=2;i<=n;i++)
 {
    
    
 	cin>>t;
 	inser(root,t,1);
 	b[t]=1;l[t]=-1;r[t]=-1;
 }
 //for(int i=0;i<=4;i++)
 // cout<<l[i]<<" "<<r[i]<<" "<<fa[i]<<" "<<depth[i]<<endl;
 cin>>n;
 while(n--)
 {
    
    
 	cin>>t>>s;
 	if(s=="is")
 	{
    
    
 	  cin>>s>>s;
	  if(s=="root")
	  {
    
    
	  	if(t==root&&b[t]) cout<<"Yes";
	  	else cout<<"No";
	  }
	  else if(s=="parent")
	  {
    
    
	  	cin>>s>>tt;
	  	if(b[t]&&b[tt]&&(l[t]==tt||r[t]==tt)) cout<<"Yes";
	  	else cout<<"No";
	  }
	  else if(s=="left")
	  {
    
    
	  	cin>>s>>s>>tt;
	  	if(b[t]&&b[tt]&&l[tt]==t) cout<<"Yes";
	  	else cout<<"No";
	  }
	  else if(s=="right")
	  {
    
    
	  	cin>>s>>s>>tt;
	  	if(b[t]&&b[tt]&&r[tt]==t) cout<<"Yes";
	  	else cout<<"No";
	  }	
	}
	else if(s=="and")
	{
    
    
		cin>>tt;
		cin>>s>>s;
		if(s=="on")
		{
    
    
		 cin>>s>>s>>s;
		 if(b[t]&&b[tt]&&depth[t]==depth[tt]) cout<<"Yes";
		 else cout<<"No";	
		}
		else
		{
    
    
			if(b[t]&&b[tt]&&fa[t]==fa[tt]) cout<<"Yes";
			else cout<<"No";
		}
	}
	cout<<endl;
 }
 return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43540515/article/details/110258610
Recomendado
Clasificación