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

A node is a structure which may contain data and connections to other nodes, sometimes called edges or links. Each node in a tree has zero or more child nodes, which are below it in the tree (by convention, trees are drawn with descendants going downwards). A node that has a child is called the child's parent node (or superior). All nodes have exactly one parent, except the topmost root node, which has none. A node might have many ancestor nodes, such as the parent's parent. Child nodes with the same parent are sibling nodes. Typically siblings have an order, with the first one conventionally drawn on the left. Some definitions allow a tree to have no nodes at all, in which case it is called empty.

An internal node (also known as an inner node, inode for short, or branch node) is any node of a tree that has child nodes. Similarly, an external node (also known as an outer node, leaf node, or terminal node) is any node that does not have child nodes.

The height of a node is the length of the longest downward path to a leaf from that node. The height of the root is the height of the tree. The depth of a node is the length of the path to its root (i.e., its root path). Thus the root node has depth zero, leaf nodes have height zero, and a tree with only a single node (hence both a root and leaf) has depth and height zero. Conventionally, an empty tree (tree with no nodes, if such are allowed) has height −1.

Each non-root node can be treated as the root node of its own subtree, which includes that node and all its descendants.[a][3]

Other terms used with trees:

Neighbor
Parent or child.
Ancestor
A node reachable by repeated proceeding from child to parent.
Descendant
A node reachable by repeated proceeding from parent to child. Also known as subchild.
Degree
For a given node, its number of children. A leaf, by definition, has degree zero.
Degree of tree
The degree of a tree is the maximum degree of a node in the tree.
Distance
The number of edges along the shortest path between two nodes.
Level
The level of a node is the number of edges along the unique path between it and the root node.[4] This is the same as depth.
Width
The number of nodes in a level.
Breadth
The number of leaves.
Complete tree
A tree with every level filled, except the last.
Forest
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.
  • Cómo 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 datos 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