fbpx
Wikipedia

Árbol (informática)

En ciencias de la computación y en informática, un árbol es un tipo abstracto de datos (TAD) ampliamente usado que imita la estructura jerárquica de un árbol, con un valor en la raíz y subárboles con un nodo padre, representado como un conjunto de nodos enlazados.

Un árbol simple sin ordenar. En este diagrama, el nodo con la etiqueta 7 tiene dos hijos, el 2 y el 6, y un padre, el 2. La raíz, al inicio, no tiene padre.

Una estructura de datos de árbol se puede definir de forma recursiva (localmente) como una colección de nodos (a partir de un nodo raíz), donde cada nodo es una estructura de datos con un valor, junto con una lista de referencias a los nodos (los hijos), con la condición de que ninguna referencia esté duplicada ni que ningún nodo apunte a la raíz.

Alternativamente, un árbol se puede definir de manera abstracta en su conjunto como un árbol ordenado, con un valor asignado a cada nodo. Ambas perspectivas son útiles: mientras que un árbol puede ser analizado matemáticamente, realmente es representado como una estructura de datos en la que se trabaja con cada nodo por separado (en lugar de como una lista de nodos y una lista de adyacencia entre nodos, como un grafo). Mirando a un árbol como conjunto, se puede hablar de el nodo padre de un nodo dado, pero en general se habla de una estructura de datos de un nodo dado que sólo contiene la lista de sus hijos sin referencia a su padre (si lo hay).

Definición

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

Un árbol es una estructura (posiblemente no lineal) de datos compuesta de nodos, vértices y aristas que es acíclica. Un árbol que no tiene ningún nodo se llama árbol vacío o nulo. Un árbol que no está vacío consta de un nodo raíz y potencialmente muchos niveles de nodos adicionales que forman una jerarquía.

Terminología utilizada en árboles

  • Raíz: El nodo superior de un árbol.
  • Hijo: Un nodo conectado directamente con otro cuando se aleja de la raíz.
  • Padre: La noción inversa de hijo.
  • Hermanos: Un conjunto de nodos con el mismo padre.
  • Descendiente: Un nodo accesible por descenso repetido de padre a hijo.
  • Ancestro: Un nodo accesible por ascenso repetido de hijo a padre.
  • Hoja: Un nodo sin hijos.
  • Nodo interno: Un nodo con al menos un hijo.
  • Grado: Número de subárboles de un nodo.
  • Brazo: La conexión entre un nodo y otro.
  • Camino: Una secuencia de nodos y brazos conectados con un nodo descendiente.
  • Nivel: El nivel de un nodo se define por 1 + (el número de brazos entre el nodo y la raíz).
  • Altura de un nodo: La altura de un nodo es el número de brazos en el camino más largo entre ese nodo y una hoja.
  • Altura de un árbol: La altura de un árbol es la altura de su nodo raíz.
  • Profundidad: La profundidad de un nodo es el número de brazos desde la raíz del árbol hasta un nodo.
  • Bosque: Un bosque es un conjunto de árboles n ≥ 0 disjuntos.
  • Rama: Una ruta del nodo raíz a cualquier otro nodo.

Tipo de datos frente a la estructura de datos

Hay una distinción entre un árbol como un tipo de datos abstracto y como una estructura concreta de datos, de forma análoga a la distinción entre una lista y lista enlazada. Como tipo de dato, un árbol tiene un valor e hijos, y los hijos son a su vez subárboles; el valor y los hijos de un árbol se interpreta como el valor del nodo raíz y los subárboles de los hijos del nodo raíz. Para permitir que los árboles puedan ser finitos, hay que, o bien permitir que la lista de los hijos pueda estar vacía, o permitir que los árboles puedan estar vacíos, en cuyo caso la lista de los hijos pueden ser de tamaño fijo (factor de ramificación, especialmente 2 o binario), si se desea.

Como una estructura de datos, un árbol vinculado es un grupo de nodos, donde cada nodo tiene un valor y una lista de referencias a otros nodos (sus hijos). Esta estructura de datos realmente define a un grafo dirigido,[1]​ porque puede tener bucles o varias referencias al mismo nodo, del mismo modo que una lista enlazada. Luego también existe el requisito de que no hay dos referencias que apuntan al mismo nodo (que cada nodo tiene como máximo un solo padre, y de hecho todos lo tienen, a excepción de la raíz), y un árbol que viola esto es árbol corrupto.

Debido al uso de referencias a los árboles en la estructura de datos de un árbol enlazado, a menudo se habla de árboles en los que implícitamente están siendo representados por referencias al nodo raíz, ya que esto es, normalmente, la forma en la que se aplican realmente. Por ejemplo, en lugar de un árbol vacío, uno puede tener una referencia nula: un árbol nunca está vacío, sino que una referencia a un árbol puede ser nula.

Recursividad

De forma recursiva, un árbol como un tipo de datos se define como un valor (de un cierto tipo de datos, posiblemente vacía), junto con una lista de los árboles (posiblemente una lista vacía), los subárboles de sus hijos:

t: v [t[1], ..., t[k]] 

(Un árbol t se compone de un valor v y una lista de otros árboles.)

Más elegantemente, a través de la recursión mutua, de los cuales un árbol es uno de los ejemplos más básicos, un árbol se puede definir en términos de un bosque (una lista de árboles), donde un árbol consta de un valor y un bosque (los subárboles de sus hijos):

f: [t[1], ..., t[k]] t: v f 

Tenga en cuenta que esta definición es en términos de valores, y es apropiada en lenguaje funcional (se asume la transparencia referencial); diferentes árboles no tienen conexión, ya que son simplemente listas de valores.

Como una estructura de datos, un árbol se define como un nodo (la raíz), que a su vez consta de un valor (de algún tipo de datos, posiblemente vacío), junto con una lista de referencias a otros nodos (lista posiblemente vacía y referencias posiblemente nulas):

n: v [&n[1], ..., &n[k]] 

(Un nodo n se compone de un valor v y una lista de referencias a otros nodos.)

Esta estructura de datos define un grafo dirigido,[1]​ y para que sea un árbol hay que añadir una condición en su estructura global (en su topología), y esto es que a lo sumo una referencia puede apuntar a cualquier nodo dado (un nodo tiene como máximo un solo padre), y ningún nodo del árbol puede apuntar a la raíz. De hecho, todos los nodos (que no sean la raíz) deben tener exactamente un padre, y la raíz no debe tener ningún padre.

De hecho, dada una lista de nodos, y para cada nodo de una lista de referencias a sus hijos, no se puede saber si esta estructura es un árbol o no sin analizar su estructura global, como se define a continuación.

Teoría de tipos

Como un tipo abstracto de datos (TAD), el tipo de árbol abstracto T con los valores de algún tipo E se define utilizando el tipo abstracto de los bosques F (lista de árboles), por las funciones:

valor: TE
hijo: TF
nulo: () → F
nodo: E × FT

con los axiomas:

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

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

Matemáticamente

Visto en su conjunto, una estructura de datos en árbol es un árbol ordenado, generalmente con valores unidos a cada nodo. Concretamente, es (si se requiere que no sea vacío):

  • Un árbol arraigado en dirección contraria a la raíz (un término más estrecho es una arborescencia), significa:
    • Un grafo dirigido.
    • Cuyo grafo no dirigido subyacente es un árbol (dos vértices están conectados por exactamente un camino simple).
    • Con una raíz destacada (un vértice se designa como la raíz).
    • Lo que determina la dirección en los brazos (flechas que apuntan fuera de la raíz; dado un brazo, el nodo desde donde la flecha apunta se llama el padre y el nodo al que apunta se llama el hijo).

Junto con:

  • Una ordenación en los nodos hijos de un nodo dado, y un valor (de algún tipo de datos) en cada nodo.

A menudo, los árboles tienen un factor de ramificación de dos nodos hijo (posiblemente vacíos, por lo tanto, como máximo dos nodos secundarios no vacíos). En estos casos se habla de un árbol binario.

Permitir árboles vacíos hace algunas definiciones simples un poco más complicadas: un árbol con raíz no debe estar vacío, por lo tanto, si a los árboles vacíos se le asigna la definición anterior, en su lugar se convierte en un árbol vacío, o un árbol arraigado de tal manera que .... Por otro lado, los árboles vacíos se simplifican definiendo un factor de ramificación fijo: con árboles vacíos, un árbol binario es un árbol de tal manera que cada nodo tiene exactamente dos hijos, cada uno de los cuales es un árbol (posiblemente vacío). Los conjuntos de operaciones en un árbol deben incluir la operación de tenedor.

Terminología

Un nodo es una estructura que puede contener un valor o condición, o representar una estructura de datos separada (que puede llegar a ser un árbol). Cada nodo en un árbol tiene cero o más nodos hijo, que se disponen debajo de este en el árbol (por convenio, los árboles se dibujan de arriba abajo). Un nodo que tiene un hijo se llama el nodo padre del hijo (o nodo superior). Todos los nodos tienen al menos un padre.

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

El nodo más alto en un árbol se llama el nodo raíz. Dependiendo de la definición, un árbol puede ser obligado a tener un nodo raíz (en cuyo caso ningún árbol estaría vacío), o que se les permita estar vacíos, en cuyo caso no necesariamente tienen un nodo raíz. Siendo el nodo superior, el nodo raíz no tendrá un padre. Es el nodo en el que los algoritmos comienzan, ya que, como estructura de datos que es, sólo se puede pasar de padres a hijos. Tenga en cuenta que algunos algoritmos comienzan en la raíz, pero primero visitan a los nodos hoja (acceden al valor de los nodos hoja), y acceden por último a la raíz (es decir, que acceden por primera vez a los hijos de la raíz, pero solo acceder al valor de la raíz como último paso). Todos los demás nodos pueden ser accedidos siguiendo los brazos o enlaces. (En la definición formal, cada uno de esos caminos es único.) En los diagramas, el nodo raíz se extrae convencionalmente en la parte superior. En algunos árboles, tales como los montículos, el nodo raíz tiene propiedades especiales. Cada nodo en un árbol puede ser visto como el nodo raíz del subárbol con raíz en ese nodo.

 
Las rotaciones en árboles binarios son operaciones internas comunes utilizadas para mantener el balance perfecto (o casi perfecto) del árbol binario. Un árbol balanceado permite operaciones en tiempo logarítmico.

La altura de un nodo es la longitud de la trayectoria descendente más larga a una hoja desde ese nodo. La altura de la raíz es la altura del árbol. La profundidad de un nodo es la longitud de la trayectoria a su raíz (es decir, su camino hacia la raíz). Esto es necesario comúnmente en la manipulación de diversos árboles auto balanceables (árboles AVL, en particular). El nodo raíz tiene una profundidad cero, los nodos hoja tienen altura cero, y un árbol con un solo nodo (por lo tanto, tanto una raíz y una hoja) tienen profundidad y altura cero. Convencionalmente, un árbol vacío (árbol con ningún nodo, si es que están permitidos) tienen profundidad y altura -1.

Un subárbol de un árbol T es un árbol que consiste en un nodo en T y todos sus descendientes en T.[2]​ Luego los nodos se corresponden con los subárboles (a cada nodo le corresponde el subárbol de sí mismo y todos sus descendientes) - el subárbol correspondiente al nodo raíz es todo el árbol, y cada nodo es el nodo raíz del subárbol que lo determina; el subárbol correspondiente a cualquier otro nodo se denomina el subárbol apropiado (por analogía a conjunto apropiado).

Dibujando árboles

Los árboles se dibujan a menudo en el plano. Los árboles ordenados pueden ser representados esencial y únicamente en el plano, y están por lo tanto llamados árboles de plano, de la siguiente manera: si uno fija un orden convencional (por ejemplo, en el sentido de las agujas del reloj), y dispone a los nodos secundarios en ese orden (primer brazo entrante de un padre, a continuación, primer brazo de hijo, etc.), esto produce una incrustación del árbol en el plano. A la inversa, tal incrustación determina un orden de los nodos secundarios.

Si uno coloca la raíz en la parte superior (padres por encima de los niños, como en un árbol genealógico) y coloca todos los nodos que están a una distancia dada desde la raíz (en términos de número de aristas: el nivel de un árbol) en una línea horizontal dada, se obtiene un dibujo estándar del árbol. Dado un árbol binario, el primer hijo es el de la izquierda (el nodo de la izquierda), y el segundo hijo está a la derecha (el nodo de la derecha).

Representaciones

Hay muchas maneras diferentes para representar árboles; las representaciones más comunes representan a los nodos dinámicamente como registros con punteros a sus hijos, a sus padres, o a ambos, o como elementos de un vector, con relaciones entre ellos determinadas por sus posiciones en este (por ejemplo, un montículo binario).

De hecho, un árbol binario puede ser implementado como una lista de listas (una lista donde los valores son listas): la cabeza de una lista (el valor del primer término) es el hijo izquierdo, mientras que la cola (la lista de los términos segundo y siguientes) es el hijo derecho. Esto puede ser modificado para permitir que los valores, como en las listas de expresión simbólica (expresión S), en donde la cabeza (valor de primer término) es el valor del nodo, la cabeza de la cola (valor de segundo término) sea el hijo izquierdo, y la cola de la cola (lista de términos sucesorios) sea el hijo derecho.

En general un nodo en un árbol no tendrá punteros a sus padres, pero esta información puede ser incluida (ampliando la estructura de datos para incluir también un puntero al vector) o almacenarse por separado. Alternativamente, los enlaces ascendentes pueden ser incluidos en los datos del nodo hijo, como en un árbol binario enlazado.

Generalizaciones

Grafos

Si se piensa en los brazos (a nodos secundarios) como referencias, entonces un árbol es un caso especial de un grafo, y la estructura de datos de árbol se puede generalizar para representar un grafo dirigido mediante la eliminación de las restricciones de que un nodo puede solo tener a lo sumo un padre, y que no se permiten ciclos. Los brazos se consideran todavía como pares de nodos, sin embargo, los términos padres e hijos generalmente se sustituyen por terminología diferente (por ejemplo, fuente y objetivo). Existen diferentes estrategias de implementación: un grafo puede ser representado por la misma estructura de datos locales que un árbol (nodos con valor y listas de sus hijos), en el supuesto de que "la lista de los hijos" sea una lista de referencias, o globalmente por estructuras tales como listas de adyacencia.

En la teoría de grafos, un árbol es un grafo acíclico conectado; salvo indicación de lo contrario, en la teoría de grafos, los árboles y los grafos se supone que no están dirigidos. No hay correspondencia uno-a-uno entre dichos árboles y árboles como estructura de datos. Podemos tomar un árbol arbitrario sin dirección, y arbitrariamente escoger uno de sus vértices como la raíz, y hacer que todas sus brazos apunten en dirección contraria a la raíz - produciendo una arborescencia - y asignar un orden a todos los nodos. El resultado se corresponde a una estructura de datos de árbol. Escoger una raíz diferente o un orden diferente produce un grafo diferente.

Dado un nodo en un árbol, sus hijos definen un bosque ordenado (la unión de subárboles dados por todos sus hijos, o lo que es equivalente, tomar el subárbol dado por el propio nodo y borrar la raíz). Así como los subárboles son asiduos a la recursividad (como en una búsqueda por profundidad), los bosques son asiduos a la correcursión (como en una búsqueda por anchura).

A través de la recursión mutua, un bosque puede definirse como una lista de árboles (representados por nodos raíz), donde un nodo (de un árbol) se compone de un valor y un bosque (sus hijos):

f: [n[1], ..., n[k]] n: v f 

Métodos de recorrido

Pasar a través de los elementos de un árbol por medio de las conexiones entre padres e hijos se llama recorrer el árbol, y la acción es un camino por el árbol. A menudo, una operación puede ser realizada cuando un puntero llega a un nodo en particular. Un camino en el que cada nodo padre es atravesado antes que sus hijos se llama camino de orden previo; un camino en el que los hijos son atravesadas antes que sus respectivos padres se llaman un camino de orden posterior; un camino en el que el subárbol izquierdo de un nodo, el nodo en sí, y finalmente su subárbol derecho son atravesadas se llama un orden transversal. (Esta última situación, en referencia a exactamente dos subárboles, un subárbol izquierdo y un subárbol derecho, es específicamente un árbol binario.) Un camino de orden de nivel lleva a cabo una búsqueda por anchura efectiva sobre la totalidad del árbol; los nodos son atravesados nivel por nivel, en donde el nodo raíz es visitado en primer lugar, seguido por sus nodos hijos directo y sus hermanos, seguidos de sus nodos nietos y sus hermanos, etc., hasta que todos los nodos en el árbol han sido atravesado.

Operaciones comunes

  • Enumerar todos los elementos
  • Enumerar la sección de un árbol
  • Buscar un elemento
  • Añadir un nuevo elemento en una determinada posición del árbol
  • Borrar un elemento
  • Podar: Borrar una sección entera de un árbol
  • Injertar: Añadir una sección entera a un árbol
  • Buscar la raíz de algún nodo
  • Representar cada nodo como una variable en el montículo con punteros.
  • Representar el árbol con un vector

Usos comunes

Véase también

Otros árboles

 
Ejemplo de árbol (binario).

Referencias

  1. Adecuadamente, un gráfico dirigido ordenado y arraigado.
  2. Esto es diferente de la definición formal de subárbol utilizada en la teoría de grafos, donde es un subgrafo que forma un árbol - que no es necesario que incluya a todos sus descendientes. Por ejemplo, el nodo raíz, por sí mismo es un subárbol en la teoría de grafos, pero no en la teoría de estructura de datos (a menos que no haya descendientes)

Enlaces externos

  •   Datos: Q223655
  •   Multimedia: Tree structures

Árbol, informática, ciencias, computación, informática, árbol, tipo, abstracto, datos, ampliamente, usado, imita, estructura, jerárquica, árbol, valor, raíz, subárboles, nodo, padre, representado, como, conjunto, nodos, enlazados, árbol, simple, ordenar, este,. En ciencias de la computacion y en informatica un arbol es un tipo abstracto de datos TAD ampliamente usado que imita la estructura jerarquica de un arbol con un valor en la raiz y subarboles con un nodo padre representado como un conjunto de nodos enlazados Un arbol simple sin ordenar En este diagrama el nodo con la etiqueta 7 tiene dos hijos el 2 y el 6 y un padre el 2 La raiz al inicio no tiene padre Una estructura de datos de arbol se puede definir de forma recursiva localmente como una coleccion de nodos a partir de un nodo raiz donde cada nodo es una estructura de datos con un valor junto con una lista de referencias a los nodos los hijos con la condicion de que ninguna referencia este duplicada ni que ningun nodo apunte a la raiz Alternativamente un arbol se puede definir de manera abstracta en su conjunto como un arbol ordenado con un valor asignado a cada nodo Ambas perspectivas son utiles mientras que un arbol puede ser analizado matematicamente realmente es representado como una estructura de datos en la que se trabaja con cada nodo por separado en lugar de como una lista de nodos y una lista de adyacencia entre nodos como un grafo Mirando a un arbol como conjunto se puede hablar de el nodo padre de un nodo dado pero en general se habla de una estructura de datos de un nodo dado que solo contiene la lista de sus hijos sin referencia a su padre si lo hay Indice 1 Definicion 2 Terminologia utilizada en arboles 2 1 Tipo de datos frente a la estructura de datos 2 2 Recursividad 2 3 Teoria de tipos 2 4 Matematicamente 3 Terminologia 4 Dibujando arboles 5 Representaciones 6 Generalizaciones 6 1 Grafos 7 Metodos de recorrido 8 Operaciones comunes 9 Usos comunes 10 Vease tambien 10 1 Otros arboles 11 Referencias 12 Enlaces externosDefinicion Editar No es un arbol Hay dos partes sin conectar A B y C D E luego existe mas de una raiz No es un arbol En el ciclo 1 2 4 3 el 4 tiene mas de un padre No es un arbol En el ciclo B C E D B B tiene mas de un padre No es un arbol En el ciclo A A A es la raiz pero tambien tiene un padre Cada lista lineal es trivialmente un arbolUn arbol es una estructura posiblemente no lineal de datos compuesta de nodos vertices y aristas que es aciclica Un arbol que no tiene ningun nodo se llama arbol vacio o nulo Un arbol que no esta vacio consta de un nodo raiz y potencialmente muchos niveles de nodos adicionales que forman una jerarquia Terminologia utilizada en arboles EditarRaiz El nodo superior de un arbol Hijo Un nodo conectado directamente con otro cuando se aleja de la raiz Padre La nocion inversa de hijo Hermanos Un conjunto de nodos con el mismo padre Descendiente Un nodo accesible por descenso repetido de padre a hijo Ancestro Un nodo accesible por ascenso repetido de hijo a padre Hoja Un nodo sin hijos Nodo interno Un nodo con al menos un hijo Grado Numero de subarboles de un nodo Brazo La conexion entre un nodo y otro Camino Una secuencia de nodos y brazos conectados con un nodo descendiente Nivel El nivel de un nodo se define por 1 el numero de brazos entre el nodo y la raiz Altura de un nodo La altura de un nodo es el numero de brazos en el camino mas largo entre ese nodo y una hoja Altura de un arbol La altura de un arbol es la altura de su nodo raiz Profundidad La profundidad de un nodo es el numero de brazos desde la raiz del arbol hasta un nodo Bosque Un bosque es un conjunto de arboles n 0 disjuntos Rama Una ruta del nodo raiz a cualquier otro nodo Tipo de datos frente a la estructura de datos Editar Hay una distincion entre un arbol como un tipo de datos abstracto y como una estructura concreta de datos de forma analoga a la distincion entre una lista y lista enlazada Como tipo de dato un arbol tiene un valor e hijos y los hijos son a su vez subarboles el valor y los hijos de un arbol se interpreta como el valor del nodo raiz y los subarboles de los hijos del nodo raiz Para permitir que los arboles puedan ser finitos hay que o bien permitir que la lista de los hijos pueda estar vacia o permitir que los arboles puedan estar vacios en cuyo caso la lista de los hijos pueden ser de tamano fijo factor de ramificacion especialmente 2 o binario si se desea Como una estructura de datos un arbol vinculado es un grupo de nodos donde cada nodo tiene un valor y una lista de referencias a otros nodos sus hijos Esta estructura de datos realmente define a un grafo dirigido 1 porque puede tener bucles o varias referencias al mismo nodo del mismo modo que una lista enlazada Luego tambien existe el requisito de que no hay dos referencias que apuntan al mismo nodo que cada nodo tiene como maximo un solo padre y de hecho todos lo tienen a excepcion de la raiz y un arbol que viola esto es arbol corrupto Debido al uso de referencias a los arboles en la estructura de datos de un arbol enlazado a menudo se habla de arboles en los que implicitamente estan siendo representados por referencias al nodo raiz ya que esto es normalmente la forma en la que se aplican realmente Por ejemplo en lugar de un arbol vacio uno puede tener una referencia nula un arbol nunca esta vacio sino que una referencia a un arbol puede ser nula Recursividad Editar De forma recursiva un arbol como un tipo de datos se define como un valor de un cierto tipo de datos posiblemente vacia junto con una lista de los arboles posiblemente una lista vacia los subarboles de sus hijos t v t 1 t k Un arbol t se compone de un valor v y una lista de otros arboles Mas elegantemente a traves de la recursion mutua de los cuales un arbol es uno de los ejemplos mas basicos un arbol se puede definir en terminos de un bosque una lista de arboles donde un arbol consta de un valor y un bosque los subarboles de sus hijos f t 1 t k t v f Tenga en cuenta que esta definicion es en terminos de valores y es apropiada en lenguaje funcional se asume la transparencia referencial diferentes arboles no tienen conexion ya que son simplemente listas de valores Como una estructura de datos un arbol se define como un nodo la raiz que a su vez consta de un valor de algun tipo de datos posiblemente vacio junto con una lista de referencias a otros nodos lista posiblemente vacia y referencias posiblemente nulas n v amp n 1 amp n k Un nodo n se compone de un valor v y una lista de referencias a otros nodos Esta estructura de datos define un grafo dirigido 1 y para que sea un arbol hay que anadir una condicion en su estructura global en su topologia y esto es que a lo sumo una referencia puede apuntar a cualquier nodo dado un nodo tiene como maximo un solo padre y ningun nodo del arbol puede apuntar a la raiz De hecho todos los nodos que no sean la raiz deben tener exactamente un padre y la raiz no debe tener ningun padre De hecho dada una lista de nodos y para cada nodo de una lista de referencias a sus hijos no se puede saber si esta estructura es un arbol o no sin analizar su estructura global como se define a continuacion Teoria de tipos Editar Como un tipo abstracto de datos TAD el tipo de arbol abstracto T con los valores de algun tipo E se define utilizando el tipo abstracto de los bosques F lista de arboles por las funciones valor T E hijo T F nulo F nodo E F Tcon los axiomas valor nodo e f e hijo nodo e f fEn terminos de la teoria de tipos un arbol es un tipo inductivo definido por los constructores nulo bosque vacio y nodo arbol con raiz con valor dado e hijos Matematicamente Editar Visto en su conjunto una estructura de datos en arbol es un arbol ordenado generalmente con valores unidos a cada nodo Concretamente es si se requiere que no sea vacio Un arbol arraigado en direccion contraria a la raiz un termino mas estrecho es una arborescencia significa Un grafo dirigido Cuyo grafo no dirigido subyacente es un arbol dos vertices estan conectados por exactamente un camino simple Con una raiz destacada un vertice se designa como la raiz Lo que determina la direccion en los brazos flechas que apuntan fuera de la raiz dado un brazo el nodo desde donde la flecha apunta se llama el padre y el nodo al que apunta se llama el hijo Junto con Una ordenacion en los nodos hijos de un nodo dado y un valor de algun tipo de datos en cada nodo A menudo los arboles tienen un factor de ramificacion de dos nodos hijo posiblemente vacios por lo tanto como maximo dos nodos secundarios no vacios En estos casos se habla de un arbol binario Permitir arboles vacios hace algunas definiciones simples un poco mas complicadas un arbol con raiz no debe estar vacio por lo tanto si a los arboles vacios se le asigna la definicion anterior en su lugar se convierte en un arbol vacio o un arbol arraigado de tal manera que Por otro lado los arboles vacios se simplifican definiendo un factor de ramificacion fijo con arboles vacios un arbol binario es un arbol de tal manera que cada nodo tiene exactamente dos hijos cada uno de los cuales es un arbol posiblemente vacio Los conjuntos de operaciones en un arbol deben incluir la operacion de tenedor Terminologia EditarUn nodo es una estructura que puede contener un valor o condicion o representar una estructura de datos separada que puede llegar a ser un arbol Cada nodo en un arbol tiene cero o mas nodos hijo que se disponen debajo de este en el arbol por convenio los arboles se dibujan de arriba abajo Un nodo que tiene un hijo se llama el nodo padre del hijo o nodo superior Todos los nodos tienen al menos un padre Un nodo interno tambien conocido como un nodo inferior o nodo rama es cualquier nodo de un arbol que tiene nodos secundarios De manera similar un nodo externo tambien conocido como un nodo exterior nodo hoja o nodo terminal es cualquier nodo que no tiene nodos hijos El nodo mas alto en un arbol se llama el nodo raiz Dependiendo de la definicion un arbol puede ser obligado a tener un nodo raiz en cuyo caso ningun arbol estaria vacio o que se les permita estar vacios en cuyo caso no necesariamente tienen un nodo raiz Siendo el nodo superior el nodo raiz no tendra un padre Es el nodo en el que los algoritmos comienzan ya que como estructura de datos que es solo se puede pasar de padres a hijos Tenga en cuenta que algunos algoritmos comienzan en la raiz pero primero visitan a los nodos hoja acceden al valor de los nodos hoja y acceden por ultimo a la raiz es decir que acceden por primera vez a los hijos de la raiz pero solo acceder al valor de la raiz como ultimo paso Todos los demas nodos pueden ser accedidos siguiendo los brazos o enlaces En la definicion formal cada uno de esos caminos es unico En los diagramas el nodo raiz se extrae convencionalmente en la parte superior En algunos arboles tales como los monticulos el nodo raiz tiene propiedades especiales Cada nodo en un arbol puede ser visto como el nodo raiz del subarbol con raiz en ese nodo Las rotaciones en arboles binarios son operaciones internas comunes utilizadas para mantener el balance perfecto o casi perfecto del arbol binario Un arbol balanceado permite operaciones en tiempo logaritmico La altura de un nodo es la longitud de la trayectoria descendente mas larga a una hoja desde ese nodo La altura de la raiz es la altura del arbol La profundidad de un nodo es la longitud de la trayectoria a su raiz es decir su camino hacia la raiz Esto es necesario comunmente en la manipulacion de diversos arboles auto balanceables arboles AVL en particular El nodo raiz tiene una profundidad cero los nodos hoja tienen altura cero y un arbol con un solo nodo por lo tanto tanto una raiz y una hoja tienen profundidad y altura cero Convencionalmente un arbol vacio arbol con ningun nodo si es que estan permitidos tienen profundidad y altura 1 Un subarbol de un arbol T es un arbol que consiste en un nodo en T y todos sus descendientes en T 2 Luego los nodos se corresponden con los subarboles a cada nodo le corresponde el subarbol de si mismo y todos sus descendientes el subarbol correspondiente al nodo raiz es todo el arbol y cada nodo es el nodo raiz del subarbol que lo determina el subarbol correspondiente a cualquier otro nodo se denomina el subarbol apropiado por analogia a conjunto apropiado Dibujando arboles EditarLos arboles se dibujan a menudo en el plano Los arboles ordenados pueden ser representados esencial y unicamente en el plano y estan por lo tanto llamados arboles de plano de la siguiente manera si uno fija un orden convencional por ejemplo en el sentido de las agujas del reloj y dispone a los nodos secundarios en ese orden primer brazo entrante de un padre a continuacion primer brazo de hijo etc esto produce una incrustacion del arbol en el plano A la inversa tal incrustacion determina un orden de los nodos secundarios Si uno coloca la raiz en la parte superior padres por encima de los ninos como en un arbol genealogico y coloca todos los nodos que estan a una distancia dada desde la raiz en terminos de numero de aristas el nivel de un arbol en una linea horizontal dada se obtiene un dibujo estandar del arbol Dado un arbol binario el primer hijo es el de la izquierda el nodo de la izquierda y el segundo hijo esta a la derecha el nodo de la derecha Representaciones EditarHay muchas maneras diferentes para representar arboles las representaciones mas comunes representan a los nodos dinamicamente como registros con punteros a sus hijos a sus padres o a ambos o como elementos de un vector con relaciones entre ellos determinadas por sus posiciones en este por ejemplo un monticulo binario De hecho un arbol binario puede ser implementado como una lista de listas una lista donde los valores son listas la cabeza de una lista el valor del primer termino es el hijo izquierdo mientras que la cola la lista de los terminos segundo y siguientes es el hijo derecho Esto puede ser modificado para permitir que los valores como en las listas de expresion simbolica expresion S en donde la cabeza valor de primer termino es el valor del nodo la cabeza de la cola valor de segundo termino sea el hijo izquierdo y la cola de la cola lista de terminos sucesorios sea el hijo derecho En general un nodo en un arbol no tendra punteros a sus padres pero esta informacion puede ser incluida ampliando la estructura de datos para incluir tambien un puntero al vector o almacenarse por separado Alternativamente los enlaces ascendentes pueden ser incluidos en los datos del nodo hijo como en un arbol binario enlazado Generalizaciones EditarGrafos Editar Si se piensa en los brazos a nodos secundarios como referencias entonces un arbol es un caso especial de un grafo y la estructura de datos de arbol se puede generalizar para representar un grafo dirigido mediante la eliminacion de las restricciones de que un nodo puede solo tener a lo sumo un padre y que no se permiten ciclos Los brazos se consideran todavia como pares de nodos sin embargo los terminos padres e hijos generalmente se sustituyen por terminologia diferente por ejemplo fuente y objetivo Existen diferentes estrategias de implementacion un grafo puede ser representado por la misma estructura de datos locales que un arbol nodos con valor y listas de sus hijos en el supuesto de que la lista de los hijos sea una lista de referencias o globalmente por estructuras tales como listas de adyacencia En la teoria de grafos un arbol es un grafo aciclico conectado salvo indicacion de lo contrario en la teoria de grafos los arboles y los grafos se supone que no estan dirigidos No hay correspondencia uno a uno entre dichos arboles y arboles como estructura de datos Podemos tomar un arbol arbitrario sin direccion y arbitrariamente escoger uno de sus vertices como la raiz y hacer que todas sus brazos apunten en direccion contraria a la raiz produciendo una arborescencia y asignar un orden a todos los nodos El resultado se corresponde a una estructura de datos de arbol Escoger una raiz diferente o un orden diferente produce un grafo diferente Dado un nodo en un arbol sus hijos definen un bosque ordenado la union de subarboles dados por todos sus hijos o lo que es equivalente tomar el subarbol dado por el propio nodo y borrar la raiz Asi como los subarboles son asiduos a la recursividad como en una busqueda por profundidad los bosques son asiduos a la correcursion como en una busqueda por anchura A traves de la recursion mutua un bosque puede definirse como una lista de arboles representados por nodos raiz donde un nodo de un arbol se compone de un valor y un bosque sus hijos f n 1 n k n v fMetodos de recorrido EditarArticulo principal Recorrido de arboles Pasar a traves de los elementos de un arbol por medio de las conexiones entre padres e hijos se llama recorrer el arbol y la accion es un camino por el arbol A menudo una operacion puede ser realizada cuando un puntero llega a un nodo en particular Un camino en el que cada nodo padre es atravesado antes que sus hijos se llama camino de orden previo un camino en el que los hijos son atravesadas antes que sus respectivos padres se llaman un camino de orden posterior un camino en el que el subarbol izquierdo de un nodo el nodo en si y finalmente su subarbol derecho son atravesadas se llama un orden transversal Esta ultima situacion en referencia a exactamente dos subarboles un subarbol izquierdo y un subarbol derecho es especificamente un arbol binario Un camino de orden de nivel lleva a cabo una busqueda por anchura efectiva sobre la totalidad del arbol los nodos son atravesados nivel por nivel en donde el nodo raiz es visitado en primer lugar seguido por sus nodos hijos directo y sus hermanos seguidos de sus nodos nietos y sus hermanos etc hasta que todos los nodos en el arbol han sido atravesado Operaciones comunes EditarEnumerar todos los elementos Enumerar la seccion de un arbol Buscar un elemento Anadir un nuevo elemento en una determinada posicion del arbol Borrar un elemento Podar Borrar una seccion entera de un arbol Injertar Anadir una seccion entera a un arbol Buscar la raiz de algun nodo Representar cada nodo como una variable en el monticulo con punteros Representar el arbol con un vectorUsos comunes EditarRepresentar un dato jerarquicamente Almacenar un dato de tal modo que su busqueda sea eficiente ver busqueda en arboles binarios y recorrido de arboles Representar listas ordenadas de datos Como un flujo de trabajo para la composicion de imagenes digitales Algoritmos de encaminamientoVease tambien EditarRecorrido de arboles Arbol teoria de grafos Herencia multiple Gramatica generativa Agrupamiento jerarquico Particion binaria del espacio Recursion MonticuloOtros arboles Editar Ejemplo de arbol binario Arboles Binarios Arbol de busqueda binario auto balanceable Arboles AVL Arboles Rojo Negro Arbol AA Arbol de segmento Arboles Multicamino Arboles B Arboles de busqueda multicamino autobalanceados Arbol B Arbol B Referencias Editar a b Adecuadamente un grafico dirigido ordenado y arraigado Esto es diferente de la definicion formal de subarbol utilizada en la teoria de grafos donde es un subgrafo que forma un arbol que no es necesario que incluya a todos sus descendientes Por ejemplo el nodo raiz por si mismo es un subarbol en la teoria de grafos pero no en la teoria de estructura de datos a menos que no haya descendientes Enlaces externos EditarEsta obra contiene una traduccion total derivada de Tree data structure de Wikipedia en ingles concretamente de esta version publicada por sus editores bajo la Licencia de documentacion libre de GNU y la Licencia Creative Commons Atribucion CompartirIgual 3 0 Unported Datos Q223655 Multimedia Tree structures Obtenido de https es wikipedia org w index php title Arbol informatica amp oldid 140016071, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos