[Estructura de datos] Concepto y estructura de árboles y árboles binarios (1)

Tabla de contenido

1. El concepto y estructura del árbol.

        1. Definición de árbol

        2. Clasificación y relaciones de los nodos del árbol.

        3. Representación del árbol

2. Concepto y estructura del árbol binario.

        1. La definición de árbol binario.

        2. Árbol binario especial

        3. Propiedades de los árboles binarios

        4. Estructura de almacenamiento del árbol binario.

1. Almacenamiento secuencial

2. Almacenamiento en cadena


1. El concepto y estructura del árbol.

        1. Definición de árbol

El árbol es una estructura de datos no lineal , que es un conjunto de relaciones jerárquicas compuestas por n (n>=0) nodos limitados. 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.

Un árbol es un conjunto finito de n (n>=0) nodos;

Cuando n = 0, se llama árbol vacío;

En cualquier árbol que no esté vacío:

1. Existe y sólo existe un nodo específico llamado raíz;

2. Cuando n>1, los nodos restantes se pueden dividir en m (m>0) conjuntos finitos disjuntos T1, T2,..., Tm, cada uno de los cuales es en sí mismo un árbol, y se denomina subárbol (SubTree). ;

Como se muestra abajo:

Nota: En la estructura de árbol, no puede haber intersección entre subárboles ; de lo contrario, no será una estructura de árbol.

        2. Clasificación y relaciones de los nodos del árbol.

Grado de un nodo: el número de subárboles contenidos en un nodo se denomina grado del nodo; como se muestra en la figura anterior: A es 4

Nodo hoja o nodo terminal: Un nodo con grado 0 se llama nodo hoja, como se muestra en la figura anterior: K, G, L, M, N... y otros nodos son nodos hoja.

Nodo no terminal o nodo de rama: un nodo con un grado distinto de 0; como se muestra en la figura anterior: nodos como B, C, E... son nodos de rama

Nodo padre o nodo padre: si un nodo contiene nodos hijos, este nodo se denomina nodo padre de su nodo hijo; como se muestra en la figura anterior: A es el nodo padre de B

Nodo hijo o nodo hijo: El nodo raíz del subárbol contenido por un nodo se llama nodo hijo del nodo; como se muestra en la figura anterior: B es el nodo hijo de A

Nodos hermanos: los nodos con el mismo nodo padre se denominan nodos hermanos; como se muestra en la figura anterior: B y C son nodos hermanos

Grado del árbol: en un árbol, el grado del nodo más grande se llama grado del árbol; como se muestra en la figura anterior: el grado del árbol es 4

El nivel del nodo: a partir de la definición de raíz, la raíz es el primer nivel, los nodos secundarios de la raíz son el segundo nivel, y así sucesivamente.

La altura o profundidad del árbol: el nivel máximo de nodos en el árbol; como se muestra arriba: la altura del árbol es 4

Nodos primos: Los nodos cuyos padres están en el mismo nivel son primos entre sí; como se muestra en la imagen de arriba: H e I son nodos primos entre sí.

Ancestros de un nodo: todos los nodos en las ramas desde la raíz hasta el nodo; como se muestra en la figura anterior: A es el antepasado de todos los nodos, C es el antepasado de G y H

Descendientes: cualquier nodo en el subárbol con raíz en un nodo se denomina descendiente de ese nodo. Como se muestra en la imagen de arriba: todos los nodos son descendientes de A, G y H son descendientes de C

Bosque: Una colección de m (m>0) árboles disjuntos se llama bosque.

        3. Representación del árbol

        La estructura de árbol es más complicada que la tabla lineal y es más problemático almacenarla y representarla. Dado que se guarda el rango de valores, también se debe guardar la relación entre los nodos y los nodos . De hecho, hay muchas formas de representar árboles, tales como: representación de padres , representación de hijos , representación de padres hijos, representación de hermanos hijos, etc. Aquí entenderemos brevemente las representaciones de hermanos menores más utilizadas.

typedef int DataType;
struct Node
{
 struct Node* _firstChild1; // 第一个孩子结点
 struct Node* _pNextBrother; // 指向其下一个兄弟结点
 DataType _data; // 结点中的数据域
};

Ilustración:

2. Concepto y estructura del árbol binario.

        1. La definición de árbol binario.

El árbol binario es un conjunto finito de n (n>=0) nodos;

Este conjunto es un conjunto vacío (llamado árbol binario vacío);

O consta de un nodo raíz y dos árboles binarios mutuamente separados, es decir, el subárbol izquierdo y el subárbol derecho del nodo raíz;

 Ilustración:

Como se puede ver en la figura anterior:

1. No hay ningún nodo con grado mayor que 2 en un árbol binario.

2. Los subárboles de un árbol binario se pueden dividir en subárboles izquierdo y derecho y el orden no se puede invertir, por lo que el árbol binario es un árbol ordenado.

Los árboles binarios tienen las siguientes cinco formas básicas:

        2. Árbol binario especial

1. árbol inclinado

Un árbol binario en el que todos los nodos sólo tienen subárboles izquierdos se denomina árbol sesgado a la izquierda;

Un árbol binario en el que todos los nodos tienen sólo el subárbol derecho se denomina árbol sesgado a la derecha;

Icono de árbol inclinado:

2. Árbol binario completo

Un árbol binario es un árbol binario completo si el número de nodos en cada capa alcanza el máximo. Es decir, si el número de niveles de un árbol binario es K y el número total de nodos es 2^k-1, entonces es un árbol binario completo.

3. Árbol binario completo

Un árbol binario completo es una estructura de datos muy eficiente y un árbol binario completo se deriva de un árbol binario completo. Para un árbol binario con profundidad K y n nodos, se llama árbol binario completo si y solo si cada nodo se corresponde uno a uno con los nodos numerados del 1 al n en el árbol binario completo con profundidad K. Cabe señalar que un árbol binario completo es un tipo especial de árbol binario completo.

        3. Propiedades de los árboles binarios

1. Si el número de niveles 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.

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

3. Para cualquier árbol binario, si el grado es 0, el número de nodos de hoja es n0 y el número de nodos de rama con grado 2 es n1, entonces n0 = n1 + 1

4. Si se especifica que el número de niveles del nodo raíz es 1, la profundidad de un árbol binario completo con n nodos, h = log2 (n + 1) 

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

1. Si i>0, el número 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 ningún nodo principal.

2. Si 2i+1<n, número secundario izquierdo: 2i+1

3. Si 2i+1>n, el número secundario correcto: 2i+2

        

        4. Estructura de almacenamiento del árbol binario.

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

1. Almacenamiento secuencial

El almacenamiento de estructura secuencial consiste en utilizar matrices para el almacenamiento. Generalmente, las matrices solo son adecuadas para representar árboles binarios completos , porque si no son árboles binarios completos, habrá una pérdida de espacio. En realidad, sólo los montones usan matrices para almacenar

El almacenamiento secuencial de árboles binarios es físicamente una matriz y lógicamente un árbol binario.

2. Almacenamiento en cadena

La estructura de almacenamiento vinculado de un árbol binario se refiere al uso de una lista vinculada para representar un árbol binario, es decir, el uso de una cadena para indicar la relación lógica de los elementos;

El método habitual es que cada nodo en la lista vinculada consta de tres campos, el campo de datos y los campos de puntero izquierdo y derecho. Los punteros izquierdo y derecho se utilizan para proporcionar las direcciones de almacenamiento de los puntos de enlace donde se encuentran el hijo izquierdo y el hijo derecho. del nodo se ubican respectivamente;

La estructura de la cadena se divide en cadena de dos puntas y cadena de tres puntas.

typedef int BTDataType;
// 二叉链
struct BinaryTreeNode
{
   struct BinTreeNode* _pLeft; // 指向当前节点左孩子
   struct BinTreeNode* _pRight; // 指向当前节点右孩子
   BTDataType _data; // 当前节点值域
}

// 三叉链
struct BinaryTreeNode
{
   struct BinTreeNode* _pParent; // 指向当前节点的双亲
   struct BinTreeNode* _pLeft; // 指向当前节点左孩子
   struct BinTreeNode* _pRight; // 指向当前节点右孩子
   BTDataType _data; // 当前节点值域
};

La primera etapa está aquí: primero comprendamos los principios de los árboles y los árboles binarios;

El blogger lo actualizará uno tras otro más adelante;

Si hay alguna deficiencia, ¡no dude en complementarla y comunicarla!

fin. . .


Supongo que te gusta

Origin blog.csdn.net/m0_71676870/article/details/132650448
Recomendado
Clasificación