< Estructura de datos > Árbol y árbol binario

contenido

1. El concepto y la estructura del árbol.

        concepto de árbol

        sustantivo propio de arbol

        representación del árbol

        El uso de los árboles en la práctica.

2. El concepto y la estructura del árbol binario.

        concepto

        árbol binario real

        árbol binario especial

        Propiedades de los árboles binarios

        estructura de almacenamiento del árbol binario


1. El concepto y la estructura del árbol.

        concepto de árbol

  • árbol verdadero:

  • Árbol en estructura de datos:

Un árbol es una estructura de datos no lineal, que consta de n (n>=0) nodos finitos para formar un conjunto con relación jerárquica. Se llama árbol porque parece un árbol al revés, lo que significa que tiene las raíces hacia arriba y las hojas hacia abajo.

  • Como se muestra en la figura:

 Características:

  1. Hay un nodo especial, llamado nodo raíz, el nodo raíz no tiene nodos predecesores
  2. A excepción del nodo raíz, los nodos restantes se dividen en M(M>0) conjuntos T1, T2, ..., Tm que no se cruzan entre sí, y cada conjunto Ti(1<= i<= m) es una estructura con subárboles en forma de árbol. El nodo raíz de cada subárbol tiene un único predecesor y puede tener 0 o más sucesores.
  3. Por lo tanto, el árbol se define recursivamente.

Darse cuenta:

  1. En una estructura de árbol, no puede haber intersección entre subárboles, de lo contrario no será una estructura de árbol.
  2. A excepción del nodo raíz, cada nodo tiene uno y solo un nodo principal.
  3. Un árbol de N nodos tiene N-1 aristas.
  • Como se muestra en la figura: (Los dos siguientes no son árboles)

        sustantivo propio de arbol

  • Nombre propio:
  1. Grado de un nodo: El número de subárboles contenidos en un nodo se llama el grado del nodo, como se muestra arriba: A es 6
  2. Nodo hoja o nodo terminal: un nodo con un grado de 0 se llama nodo hoja, como se muestra en la figura anterior: B, C, H, I... y otros nodos son nodos hoja
  3. Nodos no terminales o nodos ramificados: nodos cuyo grado no es 0; como se muestra en la figura anterior: D, E, F, G... y los demás nodos son nodos ramificados
  4. Nodo principal o nodo principal: si un nodo contiene un nodo secundario, el nodo se denomina nodo principal de su nodo secundario; como se muestra arriba: A es el nodo principal de B
  5. Nodo hijo o nodo hijo: El nodo raíz del subárbol contenido en un nodo se denomina nodo hijo del nodo; como se muestra arriba: B es el nodo hijo de A
  6. Nodos hermanos: los nodos con el mismo nodo principal se denominan nodos hermanos; como se muestra arriba: B y C son nodos hermanos
  7. El grado del árbol: en un árbol, el grado del nodo más grande se llama grado del árbol; como se muestra arriba: el grado del árbol es 6
  8. El nivel de los nodos: a partir de la definición de la raíz, la raíz es la primera capa, los nodos secundarios de la raíz son la segunda capa, y así sucesivamente;
  9. La altura o profundidad del árbol: el nivel máximo de nodos en el árbol; como arriba: la altura del árbol es 4
  10. Nodo primo: los nodos cuyos padres están en la misma capa son primos entre sí; como se muestra arriba: H e I son nodos hermanos entre sí
  11. Antepasados ​​de un nodo: todos los nodos en la rama desde la raíz hasta el nodo; como se muestra arriba: A es el antepasado de todos los nodos
  12. Descendientes: cualquier nodo en el subárbol con raíz en un nodo se denomina descendiente del nodo. Como se muestra arriba: todos los nodos son descendientes de A
  13. Bosque: Una colección de m (m>0) árboles disjuntos se llama bosque;
  14. El ancestro común más cercano: el ancestro más cercano a algunos nodos, por ejemplo, el ancestro común más cercano de P y Q es J, y el ancestro común más cercano de K y F es F. El nodo en sí también puede convertirse en su propio antepasado.
  •  expandir:

Después de conocer los nombres propios anteriores, puede intentar calcular la relación entre el número total de nodos y el número de aristas :

Suponiendo que el número total de nodos es n, entonces el número de aristas es n-1, ¿cómo calcularlo? Obviamente, el borde es el soporte que conecta cada nodo, como se muestra en la línea negra de arriba. Suponga que el grado del árbol es x, y se sabe por el nombre propio que el grado del árbol es el número de grados del nodo más grande, y el número de nodos con grado i es ni, entonces el número total de nodos es la suma de estos nodos, es decir, n=n0+n1+n2+n3+...+n(i-1)+n(i)

En resumen:

  • Número de lados: n-1
  • Número total de nodos: n=n0+n1+n2+n3+...+n(i-1)+n(i)

Ejemplo de introducción:

  • Respuesta: C
  • Analizar gramaticalmente:

Sea ni el número de nodos con grado i, y el árbol tiene un total de n nodos, entonces n=n0+n1+n2+n3. El número total de aristas en un árbol con n nodos es n-1. Según la definición de grado, la relación entre el número total de aristas y el grado es n-1=0*n0+1*n1+2*n2+3*n3. Según el significado de la pregunta: n3=2, n2=1, n1=2. Resuelve las dos ecuaciones simultáneamente, puedes obtener n0 = n2 + 2n3 + 1, n0=6, elige C.

        representación del árbol

La estructura de árbol es más complicada que la tabla lineal, porque no se conoce el número de niños. Pero si se conoce el grado del árbol, está bien definido.

//假设指定树的度,可以直接定义
#define N 5
struct TreeNode
{
	int data;
	struct TreeNode* subs[N]; //指针数组,每个结点存5个
};

Pero hay otra falla, dado que el grado del árbol es 5, solo puede establecer el grado de cada nodo en 5, pero de hecho, solo necesita asegurarse de que el grado de cada nodo sea <= 5, entonces Puede verse que este método conduce a una pérdida de espacio. Además, si no se conoce el grado del árbol, es difícil definir el método anterior, se puede utilizar el siguiente esquema:

  • Notación de hermano menor:

Dado que se conserva el rango de valores, también se debe conservar la relación entre nodos y nodos. En la práctica, hay muchas representaciones de árboles, como la representación de padres, la representación de niños, la representación de padres de niños y la representación de hermanos de niños. Aquí simplemente entendemos la notación de hermano menor más utilizada.

//孩子兄弟表示法
typedef int DataType;
struct TreeNode
{
	struct TreeNode* firstChild1; // 第一个孩子结点
	struct TreeNode* pNextBrother; // 指向其下一个兄弟结点
	DataType data; // 结点中的数据域
};
  • Haz un dibujo para demostrar el proceso:

Supongamos que queremos representar el siguiente árbol:

La estructura física es la siguiente:

También se puede entender así:

Explique el principio:

A partir de la demostración de la imagen del código anterior y la apariencia del árbol, sabemos que el nodo raíz A tiene dos hijos, B y C. Siempre deje que el hijo izquierdo de A apunte al primer hijo B, y los otros hijos C de A dejen que el puntero del hermano de B vaya a Señalando a, C no tiene hermanos, y apunta directamente a NULL. De la misma manera, B tiene 3 hijos, deje que el puntero del hijo izquierdo apunte al primer hijo D, luego deje que el puntero hermano de D apunte al siguiente E, y así sucesivamente... Este método muestra cuántos hijos tiene un nodo. No importa, deje que el padre señale directamente al primer hijo, y los niños restantes están vinculados con el puntero del hermano del niño.

        El uso de los árboles en la práctica.

  • (representa la estructura de árbol de directorios del sistema de archivos)

2. El concepto y la estructura del árbol binario.

        concepto

Árbol binario: un árbol de grado 2 , un árbol binario es un conjunto finito de nodos , el conjunto:

  1. o vacío
  2. Consta de un nodo raíz más dos árboles binarios llamados subárboles izquierdo y derecho

Como se muestra en la figura:

 Como se puede ver en la figura anterior:

  1. No hay ningún nodo con grado mayor que 2 en un árbol binario
  2. El subárbol de un árbol binario se divide en izquierda y derecha, y el orden no se puede invertir, por lo que el árbol binario es un árbol ordenado.

Nota: Para cualquier árbol binario, se compone de las siguientes situaciones:

        árbol binario real

¿Qué fue lo primero que dijiste cuando viste un árbol así?

¿Estás suspirando, por ejemplo, cómo puede haber un árbol tan simétrico, o incluso una quintaesencia nacional? Creo que está bien jaja... Después de aprender el " árbol binario especial " a continuación, tendrás una nueva comprensión.

        árbol binario especial

  1. Árbol binario completo: un árbol binario, si el número de nodos en cada capa alcanza el valor máximo, el árbol binario es un árbol binario completo. Es decir, si un árbol binario tiene K niveles y el número total de nodos es 2^k -1, entonces es un árbol binario completo.
  2. Árbol binario completo: un árbol binario completo es una estructura de datos altamente eficiente y un árbol binario completo se deriva de un árbol binario completo. Para un árbol binario de profundidad K con n nodos, se llama árbol binario completo si y solo si cada nodo del árbol corresponde uno a uno con los nodos numerados del 1 al n en el árbol binario completo de profundidad K. Tenga en cuenta que un árbol binario completo es un tipo especial de árbol binario completo.

En términos simples, cada nodo de un árbol binario completo tiene un grado 2 y un árbol binario completo es un caso especial de un árbol binario completo. Cuando la profundidad es K, el árbol binario completo es un árbol binario completo en el intervalo de [1, k-1] capas, y solo la K-ésima capa de la última capa no está llena, pero la última capa es continua de izquierda a derecha . derecho. Icono:

 Después de aprender esto, cuando vea el árbol binario real en la imagen de arriba, ¿puede decir wc! ¿No es esto un árbol binario completo puro?

        Propiedades de los árboles binarios

Propiedad 1: si el nivel especificado del nodo raíz es 1, entonces hay como máximo 2^(i-1) nodos en el i-ésimo nivel de un árbol binario no vacío.

Propiedad 2: si se especifica que el número de niveles del nodo raíz es 1, el número máximo de nodos de un árbol binario con una profundidad de h es 2^h - 1 .

Propiedad 3: para cualquier árbol binario no vacío, si el número de nodos de hoja con grado 0 es n0 y el número de nodos de rama con grado 2 es n2, entonces n0 = n2 +1

Propiedad 4: si el nivel del nodo raíz se especifica como 1, la profundidad de un árbol binario completo con n nodos, h= log2(N+1) . 

Propiedad 5: Para un árbol binario completo con n nodos, si todos los nodos están numerados desde 0 en el orden de la matriz de arriba a abajo y de izquierda a derecha, entonces para el nodo con el número de secuencia i:

  • 1. Si i>0, el número de secuencia principal del nodo en la posición i: (i-1)/2, i=0, i es el número de nodo raíz y no hay nodo principal
  • 2. Si 2i+1<n, el número de hijo izquierdo: 2i+1, 2i+1>=n, de lo contrario, no queda hijo
  • 3. Si 2i+2<n, el número de secuencia del hijo derecho: 2i+2, 2i+2>=n; de lo contrario, no hay hijo derecho

Nota: El conocimiento relevante de la propiedad 5 se ampliará en la siguiente estructura de almacenamiento.

Ejemplo de presentación:

  • Ejemplo 1:

  • Respuesta: B
  • Analizar gramaticalmente:

Usando la propiedad 3 directamente, el nodo hoja es el grado 0, y n0 siempre es 1 más que el nodo con n2 grado 2, entonces n0=200, elija B.

  • Ejemplo 2:

  • Respuesta: A
  • Analizar gramaticalmente:

Se sabe por el artículo anterior que el grado máximo de cada nodo de un árbol binario completo es 2, el mínimo es 0, y el número de nodos con grado i es ni, donde i pertenece a [0, 2], y solo Se requiere una trilogía.

  1. El número total de nodos es 2n, luego 2n=n2+n1+n0,
  2. Debido a que es un árbol binario, existe n0-1=n2, entonces la fórmula se convierte en n0-1+n1+n0=2n.
  3. Y debido al árbol binario completo, n1 solo puede ser 0 o 1, y es necesario asegurarse de que el resultado sea un número entero, por lo que n1 es 1. En resumen, n0=n
  • Ejemplo 3:

  • Respuesta: B
  • Analizar gramaticalmente:

Esta pregunta en realidad no es complicada, a través del árbol binario completo y el número de nodos, podemos deducir el rango de alturas para bloquear la respuesta.

  1. Suponiendo que la altura es h, cuando el número de nodos es mayor, el árbol binario es un árbol binario completo, entonces se satisface la propiedad 2, 2^h-1=531, y h es log2(532), que es el valor más bajo de la altura.
  2. Cuando el número de nodos es el mínimo, es decir, las capas primera a h-1 son todos nodos de grado 2, y sólo la última capa, la capa h-ésima, tiene un solo nodo. En este momento, la fórmula: 2^(h-1)-1+1=531, la solución h es log2(531)+1, y este caso es el valor más alto de la altura del árbol
  3. Como resultado, el rango de valores del árbol (log2(532), log2(531)+1) se redondea para obtener h como 10, elija B

        estructura de almacenamiento del árbol binario

Los árboles binarios generalmente se pueden almacenar en dos estructuras, una estructura secuencial y una estructura de cadena.

  • 1. Almacenamiento secuencial

El almacenamiento de estructura secuencial consiste en utilizar arreglos para el almacenamiento. Generalmente, los arreglos solo son adecuados para representar árboles binarios completos, porque los árboles binarios no completos desperdiciarán espacio. En realidad, solo el montón usará la matriz para almacenarlo, y explicaremos específicamente el montón en los siguientes capítulos. El almacenamiento de orden de árbol binario es físicamente una matriz y, lógicamente, es un árbol binario.

Por ejemplo, queremos representar el siguiente árbol binario completo (estructura lógica)

En este punto, tratamos de usar una matriz para almacenar (estructura física)

 Almacenamos los datos del árbol en la estructura lógica anterior en la matriz y usamos subíndices para representar diferentes datos para facilitar el acceso. En este punto, tenemos que imaginar esta matriz como un "árbol", ¿cómo hacerlo? como sigue:

Simplemente restaure la matriz para que se vea como un árbol, como se muestra arriba.

  • Ahora que el dibujo está fuera, hay un problema. ¿Cómo aclarar la relación entre padre e hijo?

Primero, asumiendo que el subíndice del padre es padre , el subíndice del hijo izquierdo es hijo izquierdo y el subíndice del hijo derecho es hijo derecho , la relación de subíndice entre padre e hijo es la siguiente:

  1. hijo izquierdo = padre*2 + 1
  2. hijo derecho = padre*2 + 2
  3. padre = (hijo - 1) / 2

Análisis: No es difícil encontrar a partir de la figura que los subíndices de todos los niños de la izquierda son números impares, y los subíndices de los niños de la derecha son números pares, por lo que no es difícil encontrar las expresiones de la izquierda y la derecha. niños. En cambio, se puede deducir la expresión del padre.

  • Pero en la fórmula del padre, solo hay (hijo - 1) / 2, y no hay distinción entre los hijos izquierdo y derecho.¿Por qué?

Aquí asumimos que los subíndices de hijo izquierdo y derecho son ambos 3. No es difícil encontrar que los subíndices principales calculados son ambos 1. De manera similar, cuando los hijos izquierdo y derecho son ambos subíndices de 4, los subíndices del padre se calculan para ser 1. Esta regla Se puede saber que el padre puede ser representado directamente por el subíndice hijo, y no hay necesidad de distinguir los hijos izquierdo y derecho.

  • 2. Cadena de almacenamiento

La estructura de almacenamiento en cadena de un árbol binario significa que un árbol binario está representado por una lista enlazada, es decir, una cadena se usa para indicar la relación lógica de los elementos. El método habitual es que cada nodo en la lista enlazada consta de tres campos, el campo de datos y los campos de puntero izquierdo y derecho. Los punteros izquierdo y derecho se utilizan respectivamente para proporcionar las direcciones de almacenamiento de los nodos de enlace donde los elementos secundarios izquierdo y derecho del nodo se encuentran. La estructura de la cadena se divide además en cadena de dos tenedores y cadena de tres tenedores. En la actualidad, generalmente usamos la cadena de dos tenedores en nuestro estudio. Más tarde, cuando aprendamos estructuras de datos de alto nivel como el árbol rojo-negro, lo haremos use una cadena de tres horquillas.

Supongo que te gusta

Origin blog.csdn.net/bit_zyx/article/details/123944489
Recomendado
Clasificación