1 / 51

Árboles

Árboles. Arboles. Un árbol es una estructura de datos no lineal formada por un conjunto de nodos. Son estructuras jerárquicas, cada elemento puede tener diferentes siguientes elementos.

teness
Download Presentation

Árboles

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Árboles

  2. Arboles • Un árbol es una estructura de datos no lineal formada por un conjunto de nodos. • Son estructuras jerárquicas, cada elemento puede tener diferentes siguientes elementos. • El concepto de árbol implica una estructura en la que los datos se organizan de modo que los elementos de información están relacionados entre sí a través de ramas

  3. Arboles • Un árbol esta compuesto por un conjunto finito de elementos, llamados nodos y un conjunto finito ramas , que conectan a los nodos. • En un árbol existe un nodo especial llamado raíz. Así mismo, un nodo del que sale una rama, recibe el nombre de nodo de bifurcación o nodo rama y un nodo que no tiene ramas se le llama nodo hoja

  4. Como se aprecia en la figura cada nodo de un árbol es la raíz de algún subárbol contenido en el. El número de ramas de un nodo recibe el nombre de grado del nodo. • El nivel de un nodo respecto al nodo raíz se define diciendo que la raíz tiene el nivel 0 cualquier otro nodo tiene un nivel igual a la distancia de ese nodo al nodo raíz. El máximo de los nivele se denomina altura del árbol. • Es útil limitar los arboles en el sentido de que cada nodo sea a lo sumo de grado 2. De esta forma cabe distinguir entre subárbol izquierdo y subárbol derecho de un nodo. Los arboles así formados, se les llama arboles binarios.

  5. Un árbol binario es un árbol en el que ningún nodo puede tener más de dos subárboles. En un árbol binario cada nodo puede tener cero, uno o dos hijos (subárboles). Se conoce el nodo de la izquierda como hijo izquierdo y el nodo de la derecha como hijo derecho.

  6. Un árbol binario es una estructura recursiva, existe un nodo denominado raíz. Cada nodo es la raíz de su propio subárbol y tiene 0, 1 o 2 hijos, que son raíces de árboles llamados subárboles derecho e izquierdo del nodo respectivamente. Un árbol binario se divide en tres subconjuntos disjuntos: • {R} Nodo raíz • {I1, I2, … In} Subárbol izquierdo de R • {D1, D2, … Dn} Subárbol derecho de R

  7. Imagen de un árbol binario

  8. En cualquier nivel n, un árbol binario puede contener de 1 a 2n nodos. El número de nodos por nivel contribuye a la densidad del árbol. • En la siguiente figura, el árbol de raíz A contiene 8 nodos en una profundidad de 4, mientras que el árbol (B) contiene 5 nodos y una profundidad 5. Este último caso es una forma especial, denominada árbol degenerado, en el que existe un solo nodo hoja y cada nodo no hoja sólo tiene un hijo. Un árbol degenerado es equivalente a una lista enlazada.

  9. La distancia de un nodo a la raíz determina la eficiencia con la que ser localizado. Por ejemplo, dado cualquier nodo de un nodo árbol, a sus hijos se puede acceder siguiendo sólo un camino de bifurcación o de ramas, el que conduce al nodo deseado. De modo similar, los nodos a nivel 2 de un árbol sólo pueden ser accedidos siguiendo un camino de sólo dos ramas del árbol. • La característica anterior nos conduce a una característica muy importante de un árbol binario, su balance o equilibrio. Para determinar si un árbol está equilibrado, se calcula su factor de equilibrio. El factor de equilibrio de un árbol binario es la diferencia en altura entre los subárboles derecho e izquierdo. Si so define la altura del subárbol izquierdo como HI y la altura del subárbol derecho como HD, entonces el factor de equilibrio del árbol B, se determina por la siguiente fórmula: B = HD -HI

  10. Utilizando esta fórmula el equilibrio del nodo raíz los dos árboles de la figura anterior, (A) -1 y (B) 4. • Un árbol está perfectamenteequilibrado si su equilibrio o balance es cero y sus subárboles son también perfectamente equilibrados. Dado que esta definición ocurre raramente se aplica una definición alternativa. Un árbol binario está equilibrado si la altura de sus árboles difiere en no más de uno (su factor de equilibrio es -1, 0, +1) y sus subárboles son también equilibrados. • Un árbol binario está equilibrado si para cada nodo del árbol la diferencia entre la altura de la rama derecha y, rama izquierda es menor o igual que 1 (en valor absoluto).

  11. Un árbol binario completo de profundidad n es un árbol en el que para cada nivel, del 0 al nivel n-1, tienen un conjunto lleno de nodos y todos los nodos hija a nivel n ocupan las posiciones más a la izquierda del árbol. • Un árbol binario, de profundidad n, completo que contiene 2n nodos a nivel n es un árbol lleno. Un árbol lleno es un árbol binario que tiene el máximo número de entradas para su altura. Esto sucede cuando el último nivel está lleno. La figura A muestra un árbol binario completo; el árbol de la figura B corresponde con uno lleno.

  12. El último caso de árbol es un tipo especial denominado árbol degenerado en el que hay un solo nodo hoja (E) y cada nodo no hoja sólo tiene un hijo. Un árbol degenerado es equivalente a una lista enlazada. • Los árboles binarios y llenos de profundidad k+1 proporcionan algunos datos matemáticos que es necesario comentar. En cada caso, existe un nodo al nivel 0 (raíz), dos nodos (21) a nivel 1, cuatro nodos (22) a nivel 2, etc. Se puede demostrar que a través de los primeros k niveles (del nivel 0 al nivel k-1) hay 2k -1 nodos, considerando la suma de la progresión geométrica de razón 2: • 1 + 2 + 4 + . . . + 2k-1 = 2k -1

  13. A nivel k, el número de nodos adicionados para un árbol completo está en el rango de un mínimo de 1 a un máximo de 2k (lleno). Con un árbol lleno, el número de nodos es: • 1 + 2 + 4 + . . . + 2k-1 + 2k+1 -1 • El número de nodos n en un árbol binario completo de profundidad k+1 (del nivel 0 al nivel k) cumple la inigualdad: • 2k < n < 2k+1 -1 < 2k+1 • Aplicando logaritmos a la desigualdad anterior: • k< log2 (n) < k + 1

  14. Se deduce que la altura o profundidad de un árbol binario completo de n nodos es: • H = |Log2 n| + 1 (parte de Log2 n + 1 • Por ejemplo, un árbol lleno de profundidad 4 (niveles 0 a 3) tiene 24 -1 = 15 nodos.

  15. Existen otros conceptos que definen las características del árbol, en relación a su tamaño: • Orden: es el número potencial de hijos que puede tener cada elemento de árbol. De este modo, diremos que un árbol en el que cada nodo puede apuntar a otros dos es de orden dos, si puede apuntar a tres será de orden tres, etc. • Grado: el número de hijos que tiene el elemento con más hijos dentro del árbol.

  16. Nivel: se define para cada elemento del árbol como la distancia a la raíz, medida en nodos. El nivel de la raíz es cero y el de sus hijos uno. Así sucesivamente. • Altura: la altura de un árbol se define como el nivel del nodo de mayor nivel. Como cada nodo de un árbol puede considerarse a su vez como la raíz de un árbol, también podemos hablar de altura de ramas.

  17. Estructura de un Árbol Binario • La estructura de un árbol binario se construye con nodos. Cada nodo debe contener el campo dato (datos a almacenar) y dos campos apuntador, uno al subárbol izquierdo y otro al subárbol derecho, que se conocen como puntero izquierdo (izquierdo, izdo.) y apuntador derecho (derecho, dcho.) respectivamente. Un valor NULL indica un árbol vacío.

  18. El algoritmo correspondiente a la estructura de un árbol es el siguiente: Nodo subarbolIzquierdo <apuntador a Nodo> datos <Tipodato> subarbolDerecho <apuntador a Nodo> Fin Nodo

  19. La figura muestra un árbol binario y su estructura en nodos:

  20. Diferentes tipos de representaciones en C • Los nodos pueden ser representados con la construcción de struct. Suponiendo que el nodo tiene tres campos Datos, Izquierdo (apuntador subárbol izquierdo) y Derecho (apuntador a subárbol derecho): Representación 1 typedef struct nodo *puntero_arbol; struct nodo { int datos; puntero_arbol hijoIzdo, hijoDcho; }

  21. Representación 2 typedef int TipoElemento; es el tipo de los datos; puede ser cualquier tipo ya definido. struct { TipoElemento dato; struct Nodo *izdo, *dcho; }; typedef struct Nodo ElementoDeArbolBin; typedef ElementoDeArbolBin *ArbolBinario;

  22. Creación de un Árbol Binario A partir del nodo raíz de un árbol se puede acceder a los demás nodos del árbol; por ello el apuntador que permite acceder al árbol es el que referencia al raíz. La rama izquierda y derecha son a su vez árboles binarios que tienen su raíz, y así recursivamente hasta llegar a las hojas del árbol. La formación del árbol pasa por la creación de cada uno de los nodos y el enlace con el correspondiente nodo padre. Para crear un nodo de un árbol binario, se reserva memoria para el nodo, se asigna el dato al campo de datos y se inicializa los punteros izdo y dcho a NULL.

  23. ArbolBinario crearNodo (TipoElemento x) { ArbolBinario a; a = (ArbolBinario) malloc (sizeof(Nodo)); a -> dato = x; a -> dcho = a -> izdo = NULL; return a; } La función nuevoArbol ( ) crea un árbol cuya raíz es un nodo nuevo que tiene como campo dato el pasado como tercer argumento. A su vez, la rama izquierda y derecha del árbol se pasan como segundo y cuarto argumento.

  24. void nuevoArbol (ArbolBinario* raíz, ArbolBinario ramaIzqda, TipoElementos x, ArbolBinario ramaDrcha) { *raíz = crearNodo(x); (*raiz) -> izdo = ramaIzda; (*raiz) -> dcho = ramaDrcha; } Como ejemplo se crea, a continuación un árbol binario de cadenas de caracteres, siguiendo un esquema secuencial y utilizando la estructura auxiliar Pila:

  25. ArbolBinario raiz, al, a2; Pila pila; nuevoArbol(&al, NULL, "Maria", NULL); nuevoArbol(&a2, NULL, "Rodrigo", NULL); nuevoArbol(&raiz, al, "Esperanza", a2); insertar(&pila, raiz); nuevoArbol(&al, NULL, "Anyora", NULL); nuevoArbol (&a2, NULL, "Abel" ,NULL); nuevoArbol (&raiz, al', "M Jesus", a2) ; insertar(&pila, raiz) a2 = quitar(&pila); al = quitar(&pila); nuevoArbol (&raiz, al, "Esperanza", a2) ;

  26. Operaciones en Árboles Binarios Una vez que se tiene creado un árbol binario, se pueden realizar diversas operaciones sobre el. El hacer uso de una operación u otra dependerá de la aplicación que se le quiera dar al árbol. Algunas de las operaciones típicas que se realizan en árboles binarios son las siguientes: • Determinar su altura. • Determinar su número de elementos. • Determinar el número de nodos hoja. • Hacer una copia. • Visualizar el árbol binario en pantalla o en impresora. • Determinar si dos árboles binarios son idénticos. • Borrar (eliminar el árbol). • Si es un árbol de expresión", evaluar la expresión. • Si es un árbol de expresión, obtener la forma de paréntesis de la expresión.

  27. Todas estas operaciones se pueden realizar recorriendo el árbol binario de un modo sistemático. El recorrido de un árbol es la operación de vista al árbol, o lo que es lo mismo, la visita a cada nodo del árbol una vez y sólo una. El recorrido de un árbol es necesario en muchas ocasiones, por ejemplo si se desea imprimir la información contenida en cada nodo. Existen diferentes formas de visitar o recorrer un árbol.

  28. Profundidad y altura de un árbol binario La profundidad de un árbol binario es una característica que se necesita conocer con frecuencia durante el desarrollo de una aplicación con árboles. La función profundidad ( ) determina la profundidad de un árbol binario. Para ello tiene un parámetro que es un apuntador a la raíz del árbol. • El caso más sencillo de cálculo de la profundidad es cuando el árbol está vacío (raiz == NULL, o bien, ! raiz) en cuyo caso la profundidad es 0. Si el árbol no está vacío, cada subárbol debe tener su propia profundidad, por lo que se necesita evaluar cada una por separado. Las variables profundidadI, profundidadD almacenan las profundidades de los subárboles izquierdo y derecho respectivamente.

  29. La altura es un concepto similar al de profundidad de un árbol. Un árbol que tiene nodo raíz, se considera que su altura es 1, la altura del árbol: es 2, y la altura del árbol:

  30. Función que determina la altura de un árbol binario de manera recursiva. Se considera que la altura de un árbol vacío es 0; si no está vacío, la altura es 1 + máximo entre las alturas de rama izquierda y derecha. int altura(ArbolBinario r) { if (r == NULL) return 0; else return (1 + max(altura(r->izdo), altura(r->dcho))); }

  31. Número de hojas de un árbol binario • En muchas aplicaciones se desea explorar (recorrer) los nodos de un árbol pero sin tener en cuenta un orden de recorrido preestablecido. En esos casos, el cliente o usuario es libre para utilizar el algoritmo oportuno. La operación que determina el número de nodos que no tienen descendientes visita cada nodo del árbol comprobando si tiene descendientes, es decir, si es un nodo hoja. A continuación se implementa la operación con la función contarhojas (); el nodo es hoja si tanto su rama izquierda como derecha están a NULL, para visitar cada uno de los nodos se utiliza el recorrido en preorden. void contarhojas(ArbolBinario r, int* nh) { if (r != NULL) {contarhojas(r -> izdo, nh); contarhojas(r -> dcho, nh); /* procesar raíz: determinar si es hoja */ if (r->izdo= =NULL && r->dchoa==NULL) (*nh)++; } }

  32. Eliminar los nodos de un árbol binario • Esta operación libera todos los nodos del árbol; se visita cada uno de los nodos para borrar el nodo con la función free( ).El recorrido del árbol se hace de tal forma que asegura la liberación de la memoria ocupada por un nodo después de haber liberado su rama izquierda y derecha. La siguiente función implementa esta operación, antes de liberar el nodo se escribe el dato (se supone de tipo entero). void eliminarbol(ArbolBinario r) { if (r != NULL) { eliminarbol(r -> izdo); eliminarbol (r -> dcho); printf ("\tNodo borrado: %d ",r -> dato); free(r) ; } }

  33. Árboles de Expresión • Es una secuencia de tokens (componentes de léxicos que siguen unas reglas establecidas). Un token puede ser o bien un operando o bien un operador. • La figura representa la expresión infija a * (b + c ) + d junto a su árbol de expresión. El nombre de infija es debido a que los operadores se sitúan entre los operandos. En una primera observación vemos que los paréntesis de la expresión no aparecen en el árbol y esto resulta muy interesante para la evaluación de la expresión. • Un árbol de expresión es un árbol binario con las siguientes propiedades: • Cada hoja es un operando. • Los nodos raíz y nodos internos son operadores. • Los subárboles son subexpresiones en las que el nodo raíz es un operador.

  34. Árboles de Expresión • Es una secuencia de tokens (componentes de léxicos que siguen unas reglas establecidas). Un token puede ser o bien un operando o bien un operador. • La figura representa la expresión infija a * (b + c ) + d junto a su árbol de expresión. El nombre de infija es debido a que los operadores se sitúan entre los operandos. En una primera observación vemos que los paréntesis de la expresión no aparecen en el árbol y esto resulta muy interesante para la evaluación de la expresión. • Un árbol de expresión es un árbol binario con las siguientes propiedades: • Cada hoja es un operando. • Los nodos raíz y nodos internos son operadores. • Los subárboles son subexpresiones en las que el nodo raíz es un operador.

  35. Los árboles binarios se utilizan para representar expresiones en memoria; esencialmente, en compiladores de lenguajes de programación. Se muestra el árbol binario de expresión de (a + b) * c.

  36. Obsérvese que los paréntesis no se almacenan en el árbol pero están implicados en la forma del árbol. Si se supone que todos los operadores tienen dos operandos, se puede representar una expresión con un árbol binario cuya raíz contiene un operador y cuyos subárboles izquierdo y derecho son los operando s izquierdo y derecho respectivamente. Cada operando puede ser una letra (x, y, a, b, etc.) o una subexpresión representada como un subárbol. En la figura se puede ver cómo el operador que está en la raíz es *, su subárbol izquierdo representa la subexpresión (x + y) y su subárbol derecho representa la subexpresión (a - b). El nodo raíz delsubárbol izquierdo contiene el operador (+) de la subexpresión izquierda y el nodo raíz del subárbol derecho contiene el operador (-) de la subexpresión derecha. Todos los operando s letras se almacenan en nodos hojas. Árbol de expresión (x + y) * (a - b).

  37. Reglas para la Construcción de Árboles de Expresión Los árboles de expresiones se utilizan en las computadoras para evaluar expresiones usadas en programas. El algoritmo más sencillo para construir un árbol de expresión es aquel que lee una expresión completa que contiene paréntesis en la misma. Una expresión con paréntesis es aquella en que: La prioridad se determina sólo por paréntesis. La expresión completa se sitúa entre paréntesis. A fin de ver la prioridad en las expresiones, considérese la expresión, a * c + e I g - (b + d)   Los operadores con prioridad más alta son * y /; es decir, (a * c) + (e I g) - (b + d)   Los operadores que siguen en orden de prioridad son + y -, que se evalúan de izquierda a derecha. Por consiguiente, se puede escribir, ((a * c) + (e I g)) - (b + d)   Por último la expresión completa entre paréntesis será, (((a*c) + (e/g)) - (b+d))

  38. El algoritmo para la construcción de un árbol de expresión se expresa en los siguientes pasos: • La primera vez que se encuentra un paréntesis a izquierda, crea un nodo y lo hace en el nodo raíz. Se llama a éste, el nodo actual y se sitúa su puntero en una pila. • Cada vez que se encuentre un nuevo paréntesis a izquierda, crear un nuevo nodo. Si el nodo actual no tiene un hijo izquierdo, hacer al nuevo nodo el hijo izquierdo; en caso contrario, hacerle el hijo derecho. Hacer el nuevo nodo el nodo actual y situar su puntero en la pila. • Cuando se encuentra un operando, crear un nuevo nodo y asignar el operando a su campo de datos. Si el nodo actual no tiene un hijo izquierdo, hacer al nuevo nodo el hijo izquierdo; en caso contrario, hacerle el hijo derecho. • Cuando se encuentra un operador, sacar un puntero de la pila y situar el operador en el campo datos del nodo del puntero. • Ignorar paréntesis derecho y blancos.

  39. Recorrido de un árbol Para visualizar o consultar los datos almacenados en un árbol se necesita recorrer el árbol o visitar los nodos del mismo. Al contrario que las listas enlazadas, los árboles binarios no tienen realmente un primer valor, un segundo valor, tercer valor, etc. Se puede afirmar que el raíz viene el primero, pero ¿quién viene a continuación? Existen diferentes métodos de recorrido de árbol ya que la mayoría de las aplicaciones binarias son bastante sensibles al orden en el que se visitan los nodos, de forma que será preciso elegir cuidadosamente el tipo de recorrido. Un recorrido de un árbol binario requiere que cada nodo del árbol sea procesado (visitado) una vez y sólo una en una secuencia predeterminada. Existen dos enfoques generales para la secuencia de recorrido, profundidad y anchura.

  40. En el recorrido en profundidad, el proceso exige un camino desde el raíz a través de un hijo, al descendiente más lejano del primer hijo antes de proseguir a un segundo hijo. En otras palabras, en el recorrido en profundidad, todos los descendientes de un hijo se procesan antes del siguiente hijo. En el recorrido en anchura, el proceso se realiza horizontalmente desde el raíz a todos sus hijos, a continuación a los hijos de sus hijos y así sucesivamente hasta que todos los nodos han sido procesados. En otras palabras, en el recorrido en anchura, cada nivel se procesa totalmente antes de que comience el siguiente nivel. Dado un árbol binario que consta de un raíz, un subárbol izquierdo y un subárbol derecho se pueden definir tres tipos de secuencia de recorrido en profundidad.

  41. Recorrido en Preorden • El recorrido preorden2 (NID) conlleva los siguientes pasos, en los que el raíz va antes que los subárboles: • Recorrer el raíz (N) • Recorrer el subárbol izquierdo (I) en preorden. • Recorrer el subárbol derecho (D) en preorden. • Regla( En el recorrido preorder el raíz se procesa antes que-los subárboles izquierdo y derecho.)  • Dado las características recursivas de los árboles y la definición recursiva del recorrido, el algoritmo tiene naturaleza recursiva. Primero, se procesa la raíz, a continuación el subárbol izquierdo y a continuación el subárbol derecho. Para procesar el subárbol izquierdo, se hace una llamada recursiva al recorrido preorden y luego se hace lo mismo con el subárbol derecho.

  42. Recorrido en Inorder (orden) • El recorrido en orden (inorder) procesa primero el subárbol izquierdo, después el raíz y a continuación el subárbol derecho. El significado de in es que la raíz se procesa entre los subárboles. • Si el árbol no está vacío, el método implica los siguientes pasos: • Recorrer el subárbol izquierdo ,(I)en inorden. • Visitar el nodo raíz (N). • Recorrer el subárbol derecho (D) en inorden. • En el árbol de la figura siguiente, los nodos se han numerado en el orden en que son visitados durante el recorrido enorden. El primer subárbol recorrido es el subárbol izquierdo del nodo raíz (árbol cuyo nodo contiene la letra El). Este subárbol consta de los nodos B,D y E, es a su vez otro árbol con el nodo B como raíz, por lo que siguiendo el orden IND, se visita primero D, a continuación B (nodo raíz) y por último E (derecha). Después de la visita a este subárbol izquierdo se visita el nodo raíz A y por último se visita el subárbol derecho que consta de los nodos C,F y G.A continuación, siguiendo el orden IND para el subárbol derecho, se visita primero F, después C (nodo raíz) y por último G.

  43. Entonces el orden del recorrido inorden del árbol de la figura, es D-B-E-A-F-C-G.

  44. Recorrido en Postorden • El recorrido postorden (IDN) procesa el nodo raíz (post) después de que los subárboles izquierdo y derecho se han procesado. Se comienza situándose en la hoja más a la izquierda y se procesa. A continuación se procesa su subárbol derecho. Por último se procesa el nodo raíz. Las etapas del algoritmo son: • Recorrer el subárbol izquierdo (I) en postorden. • Recorrer el subárbol derecho (D) en postorden. • Visitar el nodo raíz (N) • Recorriendo en postorden el árbol de la figura siguiente se visita primero el subárbol izquierdo de A. Este subárbol consta de los nodos B,D y E; siguiendo el orden IDN, se visitará primero D(izquierdo), luego E (derecho) y por último B(nodo). A continuación, se visita el subárbol derecho de A que consta de los nodos e, F y G. Siguiendo el orden ION para este árbol, se visita primero F (izquierdo), después G(derecho) y por último e (nodo). Finalmente se visita el nodo raíz A.

  45. La secuencia de nodos que determina el recorrido en postorden del árbol de la figura , es: D-E-B-F-G-C-A.

  46. Árbol Binario de Búsqueda • Los árboles binarios ordenados se disponen siguiendo un cierto orden, respecto de un campo clave, de tal forma que para cualquier subárbol, los nadas de la rama izquierda son menores que el raíz, y los nadas de la rama derecha son mayores que el raíz. Los elementos de un árbol ordenado pueden ser eficazmente localizados, se utiliza un algoritmo de búsqueda binaria similar al empleado en arrays. • Un árbol binario de búsqueda es aquel en el que dado un nodo, todos los datos del subárbol izquierdo son menores que el dato de ese nodo-mientras que todos los datos del subárbol derecho son mayores que el dato del nodo.

  47. Creación de un Árbol Binario de Búsqueda • El árbol binario de búsqueda se construye teniendo en cuenta las siguientes premisas: • El primer elemento se utiliza para crear el nodo raíz del árbol. • Los valores que guarda cada nodo del árbol deben ser tales que pueda existir un orden. Es decir, debe existir un campo (entero, real, carácter, cadena) respecto del cual.se establece el orden del árbol. • En cualquier nodo todos los valores del subárbol izquierdo del nodo son menores al valor del nodo. De modo similar, todos los valores del subárbol derecha deben ser mayores que los valores del nodo. • Con estas condiciones es sencillo probar que el recorrido inorden del árbol produce una secuencia de valores en orden ascendente. Por ejemplo, en la siguiente figura se muestra un árbol de búsqueda de caracteres, los tres tipos de recorrido para el árbol:

More Related