Articulo de referencia

Árbol (tipo de dato abstracto)

Este árbol desordenado tiene valores no únicos (por ejemplo, el valor 2 existe en diferentes nodos, no solo en uno) y no es binario (mientras que en un árbol binario solo hay ha...

Este árbol desordenado tiene valores no únicos (por ejemplo, el valor 2 existe en diferentes nodos, no solo en uno) y no es binario (mientras que en un árbol binario solo hay hasta dos nodos hijos por nodo padre). El nodo raíz en la parte superior (con el valor 2) no tiene padre, ya que es el más alto en la jerarquía del árbol.

En informática , un árbol es un tipo de dato abstracto ampliamente utilizado que representa una estructura de árbol jerárquica con un conjunto de nodos conectados . Cada nodo en el árbol puede estar conectado a muchos hijos (dependiendo del tipo de árbol), pero debe estar conectado a exactamente un padre, [ 1 ] [ 2 ] excepto el nodo raíz , que no tiene padre (es decir, el nodo raíz como el nodo más alto en la jerarquía del árbol). Estas restricciones significan que no hay ciclos o "bucles" (ningún nodo puede ser su propio ancestro), y también que cada hijo puede ser tratado como el nodo raíz de su propio subárbol, lo que hace que la recursión sea una técnica útil para el recorrido del árbol . A diferencia de las estructuras de datos lineales , muchos árboles no pueden representarse mediante relaciones entre nodos vecinos (nodos padre e hijos de un nodo en consideración, si existen) en una sola línea recta (llamada arista o enlace entre dos nodos adyacentes).

Los árboles binarios son un tipo de estructura de datos muy utilizado, que limita el número de hijos de cada nodo padre a un máximo de dos. Cuando se especifica el orden de los hijos, esta estructura de datos corresponde a un árbol ordenado en la teoría de grafos . Se puede asociar un valor o un puntero a otros datos a cada nodo del árbol, o a veces solo a los nodos hoja , que no tienen nodos hijos.

El tipo de dato abstracto (TDA) puede representarse de diversas maneras, como mediante una lista de nodos padres con punteros a nodos hijos, una lista de nodos hijos con punteros a nodos padres, o una lista de nodos y una lista separada de relaciones padre-hijo (un tipo específico de lista de adyacencia ). Las representaciones también pueden ser más complejas, por ejemplo, utilizando índices o listas de ancestros para optimizar el rendimiento.

Los árboles utilizados en informática son similares, pero pueden ser diferentes, a las construcciones matemáticas de árboles en la teoría de grafos , los árboles en la teoría de conjuntos y los árboles en la teoría descriptiva de conjuntos .

Terminología

Un nodo es una estructura que puede contener datos y conexiones a otros nodos, a veces llamados aristas o enlaces . Cada nodo en un árbol tiene cero o más nodos hijos , que se encuentran debajo de él en el árbol (por convención, los árboles se dibujan con los descendientes hacia abajo). Un nodo que tiene un hijo se llama nodo padre del hijo (o superior ). Todos los nodos tienen exactamente un padre, excepto el nodo raíz más alto , que no tiene ninguno. Un nodo puede tener muchos nodos ancestros , como el padre del padre. Los nodos hijos con el mismo padre son nodos hermanos . Normalmente, los hermanos tienen un orden, y el primero se dibuja convencionalmente a la izquierda. Algunas definiciones permiten que un árbol no tenga ningún nodo, en cuyo caso se llama vacío .

Un nodo interno (también conocido como nodo interior , inodo o nodo de rama ) es cualquier nodo de un árbol que tiene nodos hijos. De manera similar, un nodo externo (también conocido como nodo exterior , nodo hoja o nodo terminal ) es cualquier nodo que no tiene nodos hijos.

La altura de un nodo es la longitud del camino descendente más largo desde ese nodo hasta una hoja. La altura de la raíz es la altura del árbol. La profundidad de un nodo es la longitud del camino hasta su raíz (es decir, su ruta raíz ). Por lo tanto, el nodo raíz tiene profundidad cero, los nodos hoja tienen altura cero, y un árbol con un solo nodo (es decir, raíz y hoja) tiene profundidad y altura cero. Convencionalmente, un árbol vacío (árbol sin nodos, si se permiten) tiene altura -1.

Cada nodo que no es raíz puede ser tratado como el nodo raíz de su propio subárbol , que incluye ese nodo y todos sus descendientes. [ a ] ​​[ 3 ]

Otros términos utilizados en relación con los árboles:

Vecino
Padre o hijo.
Antepasado
Un nodo al que se puede llegar procediendo repetidamente desde el hijo al padre.
Descendiente
Un nodo al que se puede llegar procediendo repetidamente de padre a hijo. También conocido como subhijo .
Grado
Para un nodo dado, su número de hijos. Una hoja, por definición, tiene grado cero.
Grado de árbol
El grado de un árbol es el grado máximo de un nodo en el árbol.
Distancia
El número de aristas a lo largo del camino más corto entre dos nodos.
Nivel
El nivel de un nodo es el número de aristas a lo largo del camino único entre él y el nodo raíz. [ 4 ] Esto es lo mismo que la profundidad.
Ancho
El número de nodos en un nivel.
Amplitud
El número de hojas.
Árbol completo
Un árbol con todos los niveles completados, excepto el último.
Bosque
Un conjunto de uno o más árboles disjuntos.
Árbol ordenado
Un árbol con raíz en el que se especifica un orden para los hijos de cada vértice.
Tamaño de un árbol
Número de nodos en el árbol.

Operaciones comunes

  • Enumerar todos los artículos
  • Enumerar una sección de un árbol
  • Buscando un artículo
  • Agregar un nuevo elemento en una posición determinada del árbol.
  • Eliminar un elemento
  • Poda : Eliminación de una sección completa de un árbol.
  • Injerto : Añadir una sección completa a un árbol.
  • Encontrar la raíz de cualquier nodo
  • Encontrar el ancestro común más bajo de dos nodos

Métodos de recorrido y búsqueda

Recorrer los elementos de un árbol, a través de las conexiones entre padres e hijos, se llama recorrer el árbol , y la acción es un recorrido del árbol. A menudo, se puede realizar una operación cuando un puntero llega a un nodo particular. Un recorrido en el que cada nodo padre se recorre antes que sus hijos se llama recorrido en preorden ; un recorrido en el que los hijos se recorren antes que sus respectivos padres se llama recorrido en postorden ; un recorrido en el que se recorre el subárbol izquierdo de un nodo, luego el nodo mismo y finalmente su subárbol derecho se llama recorrido en orden . (Este último escenario, que se refiere exactamente a dos subárboles, un subárbol izquierdo y un subárbol derecho, asume específicamente un árbol binario ). Un recorrido por niveles realiza efectivamente una búsqueda en anchura sobre la totalidad de un árbol; Los nodos se recorren nivel por nivel, visitando primero el nodo raíz, seguido de sus nodos hijos directos y sus hermanos, luego sus nodos nietos y sus hermanos, etc., hasta que se hayan recorrido todos los nodos del árbol.

Representaciones

Existen diversas formas de representar árboles. En la memoria de trabajo, los nodos suelen ser registros asignados dinámicamente con punteros a sus hijos, sus padres o ambos, así como a cualquier dato asociado. Si el tamaño es fijo, los nodos pueden almacenarse en una lista. Los nodos y las relaciones entre ellos pueden almacenarse en un tipo especial de lista de adyacencia . En las bases de datos relacionales , los nodos se representan normalmente como filas de tabla, con identificadores de fila indexados que facilitan la vinculación entre padres e hijos.

Los nodos también se pueden almacenar como elementos en una matriz , y las relaciones entre ellos están determinadas por sus posiciones en la matriz (como en un montón binario ).

Un árbol binario se puede implementar como una lista de listas: la cabeza de una lista (el valor del primer término) es el hijo izquierdo (subárbol), mientras que la cola (la lista de términos siguientes) es el hijo derecho (subárbol). Esto se puede modificar para permitir también valores, como en las expresiones S de Lisp , donde la cabeza (el valor del primer término) es el valor del nodo, la cabeza de la cola (el valor del segundo término) es el hijo izquierdo y la cola de la cola (la lista de términos siguientes) es el hijo derecho.

Los árboles ordenados pueden codificarse de forma natural mediante secuencias finitas, por ejemplo, con números naturales. [ 5 ]

Ejemplos de árboles y no árboles

No es un árbol : dos partes no conectadas , A→B y C→D→E. Hay más de una raíz.
No es un árbol : ciclo no dirigido 1-2-4-3. 4 tiene más de un padre (arista entrante).
No es un árbol : ciclo B→C→E→D→B. B tiene más de un padre (arista entrante).
No es un árbol : ciclo A→A. A es la raíz, pero también tiene un padre.
Cada lista lineal es trivialmente un árbol .

teoría de tipos

Como tipo de dato abstracto , el tipo de árbol abstracto T con valores de algún tipo E se define, utilizando el tipo de bosque abstracto F (lista de árboles), mediante las funciones:

valor: TE
niños: TF
nil: () → F
nodo: E × FT

con los axiomas:

valor(nodo( e , f )) = e
hijos(nodo( e , f )) = f

En términos de teoría de tipos , un árbol es un tipo inductivo definido por los constructores nil (bosque vacío) y node (árbol con nodo raíz con valor dado e hijos).

Terminología matemática

Vista en su conjunto, una estructura de datos de árbol es un árbol ordenado , generalmente con valores asociados a cada nodo. Concretamente, es (si se requiere que no esté vacía):

  • Un árbol enraizado con la dirección "alejándose de la raíz" (un término más específico es " arborescencia "), lo que significa:
    • Un grafo dirigido ,
    • cuyo grafo subyacente no dirigido es un árbol (cualesquiera dos vértices están conectados por exactamente un camino simple), [ 6 ]
    • con una raíz distinguida (un vértice se designa como la raíz),
    • que determina la dirección de las aristas (las flechas apuntan alejándose de la raíz; dada una arista, el nodo desde el que apunta la arista se llama padre y el nodo hacia el que apunta la arista se llama hijo ), junto con:
  • un ordenamiento en los nodos hijos de un nodo dado, y
  • un valor (de algún tipo de dato) en cada nodo.

A menudo, los árboles tienen un factor de ramificación fijo (más propiamente, limitado) ( grado de salida ), en particular, siempre tienen dos nodos hijos (posiblemente vacíos, por lo tanto, como máximo dos nodos hijos no vacíos ), de ahí que se les llame "árbol binario".

Permitir árboles vacíos simplifica algunas definiciones y complica otras: un árbol con raíz debe ser no vacío; por lo tanto, si se permiten árboles vacíos, la definición anterior se convierte en "un árbol vacío o un árbol con raíz tal que...". Por otro lado, los árboles vacíos simplifican la definición de un factor de ramificación fijo: si se permiten árboles vacíos, un árbol binario es un árbol tal que cada nodo tiene exactamente dos hijos, cada uno de los cuales es un árbol (posiblemente vacío).

Aplicaciones

Los árboles se utilizan comúnmente para representar o manipular datos jerárquicos en aplicaciones como:

Los árboles se pueden utilizar para representar y manipular diversas estructuras matemáticas, tales como:

Las estructuras de árbol se utilizan a menudo para representar las relaciones entre elementos, como por ejemplo:

Los documentos JSON y YAML pueden considerarse como árboles, pero normalmente se representan mediante listas y diccionarios anidados .

Véase también

Notas

  1. Esto difiere de la definición formal de subárbol utilizada en la teoría de grafos, que es un subgrafo que forma un árbol; no necesariamente incluye a todos los descendientes. Por ejemplo, el nodo raíz por sí solo es un subárbol en el sentido de la teoría de grafos, pero no en el sentido de la estructura de datos (a menos que no tenga descendientes).

Referencias

  1. Subero, Armstrong (2020). "3. Estructura de datos de árbol". Estructuras de datos y algoritmos sin código . Berkeley, CA: Apress. doi : 10.1007/978-1-4842-5725-8 . ISBN 978-1-4842-5724-1Un nodo padre puede tener varios nodos hijos. Sin embargo, un nodo hijo no puede tener varios padres. Si un nodo hijo tiene varios padres, entonces se trata de lo que llamamos un grafo.
  2. "Árbol abstracto / TAD Árbol | Tipos de datos abstractos | ECE 250 | Universidad de Waterloo" . ece.uwaterloo.ca . Consultado el 13 de diciembre de 2024 .
  3. Weisstein, Eric W. "Subárbol" . MathWorld .
  4. Susanna S. Epp (agosto de 2010). Matemáticas discretas con aplicaciones . Pacific Grove, CA: Brooks/Cole Publishing Co. pág. 694. ISBN  978-0-495-39132-6.
  5. L. Afanasiev; P. Blackburn; I. Dimitrio; B. Gaiffe; E. Goris; el señor Marx; Señor de Rijke (2005). "PDL para árboles ordenados" (PDF) . Revista de lógica aplicada no clásica . 15 (2): 115– 135. doi : 10.3166/jancl.15.115-135 . S2CID 1979330 . 
  6. Levin, Oscar (31 de diciembre de 2018). Matemáticas discretas: Una introducción abierta (3.ª ed.). Amazon Digital Services LLC - Kdp. pág. 247. ISBN   978-1792901690.

Lecturas adicionales