Ganado-off - una serie de ternera memoria y árbol binario

El aprendizaje es como remar río arriba

matriz de almacenamiento, Tauro árbol binario

título Descripción

Es una importante estructura de datos de árbol no lineal, de manera intuitiva, que son elementos de datos (conocidos como nodos en el árbol), organizado por la relación entre la estructura de las ramas, al igual que en la naturaleza como un árbol. Árbol muy extendida en el mundo objetivo, como la genealogía y diversas organizaciones sociales de la sociedad humana son representación de la imagen del árbol disponibles. Árbol en el equipo también ha sido ampliamente utilizado en la técnica, como por ejemplo al compilar un programa fuente, la fuente del árbol de fuentes disponibles representa la estructura sintáctica. Otro ejemplo se encuentra en el sistema de base de datos, la estructura de árbol es también una forma de organización importante de información. Todos los temas están disponibles en una jerarquía de árbol de describir. árbol lleno binario, árbol binario completo, binario tipo árbol.
Cuando el árbol binario es un árbol binario completo, las siguientes reglas se pueden almacenar:
1. subíndice de matriz 0 no se utiliza
nodo hijo izquierdo 2. El nodo i está en la posición (2 i);
el nodo hijo derecho 3. El nodo en la posición i a (2
i + 1);
nodo padre 4. el nodo i está en la posición (i / 2);
5. el nodo raíz se almacena en la posición 1 subíndice de matriz.
Aquí Insertar imagen Descripción
La cifra es un árbol binario completo, para cada nodo I, I 2 es su subárbol izquierdo, I 2 +. 1 es un subárbol derecho, i / 2 es su nodo padre.
Por supuesto, cuando el árbol no es tan árbol binario completo se puede almacenar en realidad.
Aquí Insertar imagen Descripción
La cifra es un árbol binario completo no es el caso, vamos a usar algún punto imaginario complementado en un árbol binario completo.
O el nodo raíz se almacena en la primera posición de matriz.
A continuación, para el próximo nodo etiquetado i, dejado a su hijo subíndice i 2, su hijo derecho del subíndice i 2 + 1, el subíndice su nodo padre es i / 2.
Para darle una longitud n de la matriz, que almacena un árbol binario, la matriz contiene sólo 1 y números enteros positivos, y n es una matriz de número entero es de 1 al tamaño del árbol contiguo, no va a ser 1, 2, 3,5,6, 4 roto este ausencia.
¿Por favor dígame el tamaño y la raíz del árbol, padre e imprimir cada nodo en el orden, hijo izquierdo, derecho del niño que son?

Introduzca una descripción:

La primera línea es un número entero positivo N- (1≤n≤10 . 5 ), representa el tamaño de la matriz.
La siguiente línea n números enteros, que comprende sólo el número entero 1 y n, si la entrada es -1, significa que la posición del nodo está vacío, de lo contrario es el número de nodo. Asegúrese de que toda la matriz de número de nodo de entrada de datos de 1 al tamaño del árbol contiguo.

Descripción Salida:

Para cada caso:
en primer lugar de salida en la primera línea: "El tamaño del árbol es X", X representa el tamaño del árbol, el tamaño del árbol es el número de nodos en un árbol binario.
A continuación, en la segunda línea de salida: "Nodo X es el nodo raíz del árbol", X representa el nodo raíz del árbol binario, es decir, nodo de posición de matriz subíndice 1 se almacena.
El siguiente tamaño de fila de salida, tamaño indica el tamaño del árbol.
Cada formato de línea es: "El padre del nodo i es X, el hijo izquierdo es Y, y el hijo derecho es Z", el significado de I, X, Y, Z es: un nodo padre I, nodo es X, se los niños fueron a la Y, su hijo derecho a la Z.
Si el nodo es el nodo raíz, ningún nodo padre, entonces X -1.
Si el nodo no tiene hijo izquierdo, entonces Y es -1.
Si el nodo no tiene hijo derecho, Z entonces es -1.

Ejemplo de entrada

7
1 2 3 4 5 6 7

Ejemplo de salida

El tamaño del árbol es 7
de nodo 1 es el nodo raíz del árbol
El padre del nodo 1 es -1, el hijo izquierdo es 2, y el hijo derecho es 3
El padre del nodo 2 es 1, el hijo izquierdo es 4 , y el hijo derecho es 5
el padre del nodo 3 es 1, el hijo izquierdo es 6, y el hijo derecho es 7
el padre del nodo 4 es 2, el hijo izquierdo es -1, y el hijo derecho es -1
la padre de nodo 5 es 2, el hijo izquierdo es -1, y el hijo derecho es -1
el padre del nodo 6 es 3, el hijo izquierdo es -1, y el hijo derecho es -1
el padre del nodo 7 es 3 , el hijo izquierdo es -1, y el hijo derecho es -1

Ejemplo de entrada

7
3 -1 2 -1 -1 1 4

Ejemplo de salida

El tamaño del árbol es 4
nodo 3 es el nodo raíz del árbol
El padre del nodo 1 es 2, el hijo izquierdo es -1, y el hijo derecho es -1
El padre del nodo 2 es 3, el hijo izquierdo es 1, y el hijo derecho es 4
el padre del nodo 3 es -1, el hijo izquierdo es -1, y el hijo derecho es 2
el padre del nodo 4 es 2, el hijo izquierdo es -1, y el hijo derecho es -1

Análisis de las preguntas incorrectas

& # ¥% ...... ¥ ¥ Y ( + ... (* - ** ... &% y ...... Esta es una matriz de segmento, Quiero abrir cuatro veces la memoria os olvide el pellizco ???

Este problema analógica pura, no es un poco difícil!
Escribir un esquema, o no escribir, CA directa para empezar
Tiempo para AC

#include<iostream>
#include<algorithm>
#include<string.h>
#include<map>
#include<string>
#include<math.h>
#include<stdio.h>
#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
const ll ll_inf=9223372036854775807;
const int int_inf=2147483647;
inline ll read() {
    ll c=getchar(),Nig=1,x=0;
    while(!isdigit(c)&&c!='-')c=getchar();
    if(c=='-')Nig=-1,c=getchar();
    while(isdigit(c))x=((x<<1)+(x<<3))+(c^'0'),c=getchar();
    return Nig*x;
}
#define read read()
int save[400005];
struct node {
    int l,r,f,m;
} ans[4000005];
bool cmp(node a,node b)
{
    return a.m<b.m;
}
int main() {
    int n=read;
    memset(save,-1,sizeof(save));
    int q=0;
    for(int i=1; i<=n; i++) {
        save[i]=read;
        if(save[i]!=-1)q++;
    }
    cout<<"The size of the tree is "<<q<<endl;
    for(int i=1; i<=n; i++) {
        if(save[i]!=-1) {
            cout<<"Node "<<save[i]<<" is the root node of the tree"<<endl;
            break;
        }
    }
    q=0;
    for(int i=1; i<=n; i++) {
        if(save[i]!=-1) {
            ans[q].m=save[i];
            ans[q].f=save[i/2];
            ans[q].l=save[i*2];
            ans[q++].r=save[i*2+1];
        }
    }
    sort(ans,ans+q,cmp);
    for(int i=0;i<q;i++)
    printf("The father of node %d is %d, the left child is %d, and the right child is %d\n",ans[i].m,ans[i].f,ans[i].l,ans[i].r);
}

Resumen: descuido, no he logrado, que podría durar 10 segundos de una lista roja de los resultados ............

Subproducto meses rueda

libro de ruta de montaña que, el aprendizaje es un sufrimiento sin fin para el barco.

Publicado 32 artículos originales · ganado elogios 12 · vistas 1190

Supongo que te gusta

Origin blog.csdn.net/qq_35339563/article/details/104226647
Recomendado
Clasificación