Positional Notation Binary Options


(). . ,. . ,,. . Quotquot Quotquot quotquot Significado de la palabra . . Quotquot 14:,,,,,,,,,,,,. En junio de 2006, la División de Servicios de Conservación del Departamento de Agricultura de Colorado publicó las Reglas actualizadas relativas a la administración y aplicación de la ley de malezas nocivas de Colorado (8 CCR 1206-2). El Colorado Noxious Weed Act está contenido en 35-5.5-101 a 119, C. R.S. (2003) y se aplica a todos en Colorado. En la ley se especifican tres listas de malas hierbas nocivas y las reglas actualizadas especifican qué plantas están actualmente en cada una de estas listas. Los peores ofensores de malas hierbas nocivas están en la Lista A (categoría 1) y deben ser erradicados en todo el estado. Lista B (categoría 2) malas hierbas nocivas deben ser manejados. Los planes futuros que se están desarrollando relacionados con las malas hierbas nocivas en la Lista C (Categoría 3) son proporcionar recursos adicionales de educación, investigación y control biológico a las jurisdicciones que opten por requerir el manejo de estas especies. Ahora, simplemente haga clic en el nombre de cada lista para ver las fotografías de todas las plantas en ella. Estas páginas ayudarán a las personas afectadas por la Ley de malezas nocivas de Colorado a identificar visualmente las plantas que deben erradicar y / o administrar. Las plantas en cada una de las listas están en orden alfabético por su nombre común, con su nombre científico siempre entre paréntesis. Cuando esté disponible, haga clic en el nombre de la planta resaltada para ver las hojas de datos basadas en Estados Unidos para esa hierba. Al preparar esta guía se utilizaron como fuentes las mejores fotografías gratuitas de todo el mundo, disponibles en Internet. Las fotos fueron mejoradas, según sea necesario, para ayudar a los espectadores a identificar las malas hierbas nocivas de Colorado con un esfuerzo mínimo. Para visitar el sitio de origen de cada imagen, simplemente haga clic en ella. La mayoría de estos dignos sitios fuente, pertenecen a gobiernos locales y estatales, universidades, jardines botánicos, organizaciones sin fines de lucro o fotógrafos individuales. Están llenos de documentación interesante y vale la pena navegar para obtener información adicional sobre la botánica, las malas hierbas, las plantas y otros temas relacionados. (Algunos de los sitios de Canadá, Francia, Bélgica, Noruega, Alemania, Checa, Polonia, Japón y etc. desafortunadamente no tienen sus páginas disponibles en inglés.) Especies invasoras son consideradas como cualquier especie de insectos, animales, plantas y Patógenos, incluyendo sus semillas, huevos, esporas u otros materiales biológicos capaces de propagar esa especie, que no es nativa de ese ecosistema y cuya introducción causa o es probable que cause daño económico o ambiental o daño a la salud humana. Tenga en cuenta que su definición se aplica tanto a las especies nativas como a las introducidas. Curiosamente, algunas de las especies de malezas que se consideran nocivas en Colorado son muy admirado por sus flores de belleza, uso medicinal, e incluso valor de los alimentos (sí, algunos son comestibles) en otras partes del mundo. Por supuesto, muchos son muy venenosos para los seres humanos y / o los animales domésticos. Lista A: Calle africana (Peganum harmala) Camelthorn (Alhagi pseudalhagi) Crupina común (Crupina vulgaris) Ciprés (Euphorbia cyparissias) Cochinilla (Isatis tinctoria) Salvinia gigante (Salvinia molesta) Hidrilla (Hydrilla verticillata) Centaurea pratensis Mediterráneo Salvia (Salvia aethiopis) Medusa (Taeniatherum caput-medusae) Escarola de naranja (Euphorbia myrsinites) Escaramujo anaranjado (Hieracium aurantiacum) Escarabajo púrpura (Lythrum salicaria) Escarabajo escarabajo (Chondrilla juncea) Sericea lespedeza (Centaurea solstitialis) Lista B (Parte 1): Artemisia absinthium Arbusto negro (Hyoscyamus niger) Bouncingbet (Saponaria officinalis) Cardo bull (Cirsium vulgare) Cardo común (Cirsium arvense) Clematis chino (Clematis orientalis ) (Dipsacus fullonum) Dromedario común (Dipsacus fullonum) Dromedario común (Dipsacus fullonum) Dromedario común (Dipsacus fullonum) Tejido común (Dipsacus fullonum) ) (Cymoglossum officinale) Espuela frondosa (Euphorbia esula) Lista B (Parte 2): Manzanilla de la almeja (Anthemis cotula) Mullein de la polilla (Verbascum blattaria) Cardo de almizcle (Centaurea diffusa) (Carduus acanthoides) Plátano (Elytrigia repens) Redstem filaree (Erodium cicutarium) Arceta rusa (Acroptilon repens) Ruso-oliva (Elaeagnus angustifolia) Cedro de la sal (Tamarix) Chinensis, T. parviflora y T. ramosissima) Manzanilla sin manzana (Matricaria perforata) Cardo escocés (Onopordum acanthium) Cardo escocés (Onopordum tauricum) Centaurea maculosa (Centaurea maculosa) Anoda (Anoda cristata) Azufre cinquefoil (Potentilla recta) Hibiscus trionum) Alcaravia salvaje (Carum carvi) Cenoura amarilla (Cyperus esculentus) Llanura amarilla (Linaria vulgaris) Lista C: Achicoria (Cicorium intybus) Bardana común (Arctium minus) Hembra común (Verbascum thapsus) Brome (Bromus tectorum) Lince de campo (Convolvulus arvensis) Halogeton (Halogeton glomeratus) Hierba de jamaica (Sorghum halepense) Hierba de cabra articulada (Aegilops cylindrica) Sowthistle perenne (Sonchus arvensis) Hemlock de veneno (Conium maculatum) Puncturevine (Tribulus terrestris) Velvetleaf (Abutilon theophrasti) Wild (Panicum miliaceum) Árboles binarios Todas las estructuras de datos que hemos considerado hasta este punto han sido quotlinearquot Es decir, pueden ser vistas como una lista de objetos donde cada elemento tiene UN sucesor y UN predecesor (excepto que el primer elemento lo hace No tiene un predecesor y el último elemento no tiene un sucesor). Estas estructuras lineales incluían: matrices, vectores, listas enlazadas, pilas y colas. Pero, una organización lineal no siempre es la más lógica o eficiente. En una lista enlazada, por ejemplo, cada nodo hace referencia a otro nodo (o posiblemente dos en el caso de una lista doblemente enlazada, pero esto es sólo un enlace al nodo que lo hace referencia). Pero en muchos casos, tiene sentido que un nodo haga referencia a más de un nodo (es decir, múltiples sucesores). Esto conduce a las estructuras conocidas como árboles. NOTA: Normalmente dibujaremos diagramas de nuestros árboles al revés. Es decir, el nodo principal del árbol estará en la parte superior del diagrama y los nodos a los que hace referencia estarán debajo (como se ve en el diagrama de la derecha). 2. Árbol de la terminología Para la referencia y la discusión, las partes de un árbol ADT y las relaciones entre sus elementos se dan nombres. Esta terminología es una combinación de árboles dendrológicos y árboles genealógicos. Los más comunes incluyen: Nodo - Un elemento del árbol que contiene datos y enlaces a otros nodos. Borde (aka: branch) - Una conexión entre dos nodos (es decir, una referencia o enlace). Trivial Tree - Un árbol vacío (es decir, sin nodos). Root - El nodo más alto del árbol. El nodo rojo en el diagrama anterior es la raíz. Hoja - Nodo en un árbol que NO hace referencia a ningún otro nodo. Los nodos verdes y amarillos en el diagrama anterior son hojas. Parent - El padre de un nodo es el nodo que lo hace referencia. En la mayoría de los casos, los nodos tendrán un único padre (aunque esto no es necesario en todas las estructuras de árbol). En el diagrama anterior, el nodo rojo es el padre de los dos nodos azules. La raíz de un árbol es el único nodo sin un padre. Niño - Un nodo de un nodo es cualquier nodo referenciado por el nodo. En el diagrama anterior, el nodo azul de la izquierda tiene un hijo (el nodo amarillo) y el nodo azul de la derecha tiene tres hijos (los nodos verdes). Por lo tanto, una hoja es un nodo sin hijos. Hermanos - Dos o más nodos que tienen el mismo padre. Los tres nodos verdes en el diagrama anterior son hermanos, pero el nodo amarillo no tiene hermanos. Otros parientes. Ocasionalmente, podríamos referirnos a primos. Tíos Y / o sobrinas. Usted debe obtener la idea Ancestral - Los antepasados ​​de un nodo incluyen su padre y sus padres antepasados. Obsérvese el carácter recursivo de esta definición. La recursión es muy común con la definición y procesamiento de árboles. Descendiente - Los descendientes de un nodo son sus hijos y descendientes de sus hijos. Subárbol - Un árbol que consiste en un nodo y todos sus descendientes. Por lo tanto, todos los nodos de un árbol son raíces de un subárbol. Con esto en mente, cualquier nodo de un árbol puede ser tratado como la raíz de un árbol. Este concepto es la base para el procesamiento de árboles recursivamente. Árbol Binario - Un árbol cuyos nodos pueden tener como máximo dos hijos. El árbol del diagrama anterior NO es un árbol binario porque el nodo azul derecho tiene tres hijos (los nodos verdes). Los árboles con los que trabajaremos serán árboles binarios. Ruta - La secuencia única (más corta) de aristas forma un nodo a otro nodo. La longitud del trazado es el número de aristas. Level (AKA: depth) - El nivel de un nodo es el número de nodos en la ruta desde ese nodo hasta la raíz del árbol. Por lo tanto, la raíz está en el nivel 1 (el nodo rojo en el diagrama), los niños de las raíces están en el nivel 2 (los nodos azules en el diagrama), los nietos de las raíces están en el nivel 3 (los nodos amarillos y verdes en el diagrama) , Etc. NOTA: Las definiciones alternativas de nivel utilizan la longitud del camino (es decir, el nivel raíz es 0, los niños raíces están en el nivel 2, etc.). Usaremos la definición dada en nuestro libro de texto (es decir, el nivel raíz es 1). Altura: la altura de un nodo es el número de nodos en el trayecto más largo desde ese nodo hasta una hoja. La altura de un árbol es la altura de su raíz. En el diagrama, el nodo rojo tiene altura 3 (que también es la altura del árbol), los nodos azules tienen altura 2 y los nodos amarillo y verde tienen altura 1. NOTA: Las definiciones alternativas de altura usan la longitud del nodo más largo (Es decir, una menos que nuestra definición de libros). Usaremos la definición dada en nuestro libro de texto. Árbol Completo - Un árbol en el cual cada hoja está al mismo nivel y cada no hoja tiene tantos hijos como sea posible (es decir, 2 para un árbol binario). Árbol completo - Un árbol completo con 0 o más de sus hojas quotrightmostquot que faltan. Tenga en cuenta que todos los árboles completos están completos, pero no todos los árboles completos están llenos. Grado - El grado de un nodo es el número de sus hijos. El grado de un árbol es el máximo de los grados de sus nodos. En el diagrama, el nodo rojo tiene grado 2, el nodo azul izquierdo tiene grado 1, el nodo azul derecho tiene grado 3 y el resto de nodos tiene grado 0. Por lo tanto, el grado del árbol es 3. Por lo tanto, un Árbol binario tendrá un grado de dos o menos. Equilibrado - Un árbol es equilibrado si el número de nodos en su subárbol izquierdo difiere del número de nodos en su subárbol derecho por no más de uno y sus subárboles izquierdo y derecho también son equilibrados. Obsérvese el carácter recursivo de esta definición. 3. El Árbol Binario ADT NOTA: Lo siguiente sigue una definición más tradicional de un árbol binario que la usada por nuestro libro de texto. Un árbol binario consta de nodos con un predecesor y como máximo dos sucesores (llamado el niño izquierdo y el niño derecho). La única excepción es el nodo raíz del árbol que no tiene un predecesor. Un nodo puede contener cualquier cantidad y cualquier tipo de datos. Operaciones (es decir, Constructores y Métodos): create - Un árbol binario puede ser creado en varios estados. Los más comunes incluyen. Un árbol vacío (es decir, sin nodos) y por lo tanto el constructor no tendrá parámetros un árbol con un nodo (es decir, la raíz) y por lo tanto el constructor tendrá un único parámetro (los datos para el nodo raíz) un árbol con una nueva raíz cuyo Los niños son otros árboles existentes y por lo tanto el constructor tendrá tres parámetros (los datos para el nodo raíz y las referencias a sus subárboles) isEmpty () - Devuelve true si no hay nodos en el árbol, false en caso contrario. IsFull () - Puede ser requerido por algunas implementaciones. Devuelve true si el árbol está lleno, false en caso contrario. Clear (): elimina todos los nodos del árbol (esencialmente reiniciándolo a un nuevo árbol vacío). Add (value) - Agrega un nuevo nodo al árbol con el valor dado. La implementación real de este método está determinada por el propósito del árbol y cómo se debe mantener y / o procesar el árbol. En primer lugar, no asumiremos ningún propósito u orden en particular y, por lo tanto, agregaremos nuevos nodos de tal manera que el árbol se mantenga casi equilibrado. Remove (): elimina el nodo raíz del árbol y devuelve sus datos. La implementación real de este método y otras formas de eliminación se determinará por el propósito del árbol y cómo se debe mantener y / o procesar el árbol. Por ejemplo, es posible que necesite un método remove () con un parámetro que indique qué nodo del árbol debe eliminarse (basado en la posición, los datos clave o la referencia). En primer lugar, no asumiremos ningún propósito u orden particular y, por lo tanto, eliminaremos la raíz de tal manera que el árbol se mantenga casi equilibrado. Otras operaciones que pueden incluirse según sea necesario: height () - Determina la altura del árbol. Un árbol vacío tendrá altura 0. size () - Determina el número de nodos en el árbol. GetRootData () - Devuelve los datos (datos primarios) o referencia a los datos (objetos) de la raíz de los árboles. GetLeftSubtree () - Devuelve una referencia al subárbol izquierdo de este árbol. GetRightSubtree () - Devuelve una referencia al subárbol correcto de este árbol. 4. Traversales de árboles binarios Como ocurre con las listas y matrices vinculadas, a menudo es necesario hacer una consulta y hacer algo con cada nodo del árbol. Con listas enlazadas y arrays, cada nodo tenía un sucesor único, por lo tanto, la forma natural de recorrer la estructura de datos fue desde el primer elemento hasta el último. Con un árbol binario, realmente no hay primero, segundo. O último elemento (es decir, los árboles no son estructuras de datos quotorderedquot de la misma manera que las estructuras de datos lineales fueron. Por lo tanto, hay varias maneras de recorrer un árbol binario. Los más comunes incluyen: pre-orden - Visite la raíz, visite todos los Los nodos en las raíces izquierda subárbol, y luego visitar todos los nodos en el subárbol de raíces derecha.-en-orden - Visite todos los nodos en las raíces izquierda subárbol, visite la raíz, y luego visitar todos los nodos en las raíces a la derecha Subtree post-order - Visita todos los nodos en el subtree de raíces, visita todos los nodos en el subtree derecho de raíces, y luego visita la raíz level-order - Visita los nodos por nivel Los nodos en cada nivel son Visitado de izquierda a derecha. Este método es realmente el más difícil y rara vez se utiliza. Por ejemplo, utilizando el árbol de arriba, estos esquemas de transversal visitaría los nodos en los siguientes órdenes: pre-orden A - B - D - C - E - G - H - F en orden D - B - A - G - E - H - C - F post-orden A - B - C - D - E - F - G - H Que ordenar debe ser utilizado Depende de la aplicación particular del árbol. 5. Implementaciones de árboles binarios Existen tres maneras principales de implementar estructuras arbóreas. Dos de ellos implican arreglos y el tercero utiliza referencias (es decir, enlaces). Implementación 1 - Una matriz de nodos Esta implementación es muy similar a la implementación de matriz de una lista vinculada. A continuación se muestra cómo un árbol se puede almacenar en una matriz. El valor de raíz indica el índice del nodo raíz en la matriz. Los valores de leftChild y rightChild indican los índices de la matriz donde se encuentran los nodos hijos. Se utiliza un valor de -1 para indicar que no hay ningún niño. Las posiciones en la matriz no utilizadas actualmente por el árbol son nodos que forman el espacio libre. Estos nodos forman una pila. El valor de free indica el índice de la parte superior de la pila (primer nodo disponible). El leftChild indica el índice del siguiente nodo de la pila (es decir, espacio libre). Root3 free4 maxNodes12 Tenga en cuenta que hay dos condiciones que determinarán si un nodo no tiene un hijo izquierdo o derecho. No hay niño dejado (el niño derecho sería similar) del artículo en la posición k si. 2k1 es mayor o igual al tamaño de la matriz, o 2k1 es menor que el tamaño de la matriz, pero el valor almacenado en esa posición es nulo. Lo siguiente podría ser utilizado para esta implementación de un árbol binario. Implementación 3 - Implementación basada en referencia (vinculada) Con el uso de una estructura enlazada (similar a listas enlazadas), se puede construir y gestionar dinámicamente un árbol binario. Primero, se necesita una clase de nodo. Utilizando esta clase de nodo, se puede implementar una clase BinaryTree de la siguiente manera (incluyendo, en este caso, las implementaciones de los métodos de árbol binario ADT dados anteriormente): 6. Traversales de árboles binarios revisados ​​Ahora que se han investigado varias implementaciones de árboles binarios, El tema de recorrer estas implementaciones necesita ser revisado. Como se mencionó anteriormente, hay 4 métodos primarios (es decir, órdenes) para atravesar un árbol binario: pre-orden - Visite la raíz, visite todos los nodos en el subárbol izquierdo de raíces y luego visite todos los nodos en el subárbol derecho de raíces . In-order - Visita todos los nodos en el subárbol raíz izquierda, visita la raíz, y luego visita todos los nodos en el subárbol derecho de las raíces. Post-order - Visita todos los nodos en el subárbol raíz izquierda, visita todos los nodos en el subárbol derecho de raíces, y luego visita la raíz. Level-order - Visita los nodos por nivel. Los nodos de cada nivel se visitan de izquierda a derecha. Este método es realmente el más difícil y se utiliza raramente. Supongamos que existe un método doIt (objeto) que determina qué se debe hacer con los datos de cada nodo a medida que se atraviesa el árbol. En caso de que estos métodos sean externos a la definición de clase BinaryTree, o interno Si externo, necesitará (al menos: debería) utilizar los métodos de la clase BinaryTree para acceder a los datos. Si es interno, podría utilizar la implementación en particular, pero el método doIt () necesitaría ser definido en esta clase también. Para demostrar estas opciones, lo siguiente da a ambas implementaciones opcionales de un recorrido de pre-orden (post-orden y en-orden sería similar): Los recorridos en orden y post-orden se pueden implementar como arriba simplemente reorganizando las tres sentencias. Pero, ¿qué pasa con el nivel de orden? En este caso, los subárboles izquierdo y derecho deben ser procesados ​​después de que todos los hermanos y primos sean procesados. Es decir, estos subárboles se deben poner en espera (es decir, en una cola) hasta que se procesen todos los nodos del nivel anterior. Por lo tanto, una implementación externa para un paso de orden de nivel podría implementarse de la siguiente manera. 8. Árboles de expresión (una aplicación de árboles binarios) Una aplicación importante de árboles binarios es la representación de expresiones formadas por operadores binarios, constantes y variables. Estos tipos de árboles son utilizados por los lenguajes de programación para representar expresiones y por aplicaciones que deben tomar una expresión como entrada del usuario (una cadena) y ser capaces de evaluar esa expresión (de forma repetida y eficiente). Operadores binarios. Un operador binario es una operación que actúa sobre dos valores y produce un solo resultado. Vamos a limitar nuestra discusión aquí a las expresiones que utilizan los cinco operadores binarios. (Multiplicación) / (división) (exponenciación) Un árbol de expresión consistirá en nodos cuyos datos sean un operador o un valor (constante o variable). Los nodos operadores tendrán SIEMPRE dos hijos que representen sus operandos. Los nodos de valor serán SIEMPRE hojas. NOTA: En todos los casos, el niño izquierdo (hoja o subárbol) será considerado el primer operando y el niño derecho (hoja o subárbol) será considerado el segundo operando. Para la adición y la multiplicación esto no es un problema, pero para las otras operaciones hará una diferencia. Nociones de expresión. Como se discutió en el término anterior, hay tres formas de representar las expresiones algebraicamente. Infijo (notación estándar): Coloque el operador entre los operandos (ejemplo: 2 3). El problema con este método son las reglas para el orden de las operaciones. Prefijo (aka: notación polaca): Coloque el operador antes de sus operandos (ejemplo: 2 3). Con esta notación, no se necesitan paréntesis. La consideración primaria es la separación de operandos consecutivos (normalmente se utiliza un solo espacio). Postfix (aka: notación polaca inversa - RPN): Coloque el operador después de sus operandos (ejemplo: 2 3). Con esta notación, no se necesitan paréntesis. La consideración primaria es la separación de operandos consecutivos (normalmente se utiliza un solo espacio). ¿Existe una relación entre las expresiones de expresión y los recorridos de los árboles de expresión Sí en el orden de recorrido da la expresión infijo (paréntesis debe ser incluido, aunque algunos de ellos no será necesario en la expresión final) pre-orden traversal da el prefijo expresión post - order traversal da la expresión postfix Por lo tanto, para cualquier expresión hay un árbol de expresión único. El árbol es independiente de la notación matemática. Creación de un árbol de expresiones Dado una expresión como una cadena de caracteres, se pueden construir árboles de expresión dependiendo del tipo de expresión utilizada. El siguiente algoritmo crea un árbol de expresión de una expresión de infijo. NOTA: Se supone que existe un método que determina la precedencia del operador (un paréntesis izquierdo tiene la precedencia más baja). Crear dos pilas. La primera pila es una pila de referencias a nodos que representan valores. Éstas podrían ser referencias a nodos de hoja (que contengan una constante o variable) o referencias a raíces de árboles de expresión completos (subárboles del árbol de expresión final). La segunda pila es una pila de operadores (caracteres) que aún no se han agregado al árbol de expresiones. Escanee la expresión (una cadena de caracteres) de izquierda a derecha. Ignorar espacios. Si el elemento siguiente es un paréntesis izquierdo, presione el paréntesis izquierdo en la segunda pila. Si el siguiente elemento de la cadena es un operador. Si la segunda pila está vacía, empuje el operador (carácter) a la segunda pila. Si la segunda pila no está vacía, mientras que la precedencia del operador en la parte superior de la segunda pila es mayor o igual que el nuevo operador. Pop un operador de la pila pop dos nodos de valor de la primera pila. Crear un nuevo nodo cuyos datos son el operador y cuyos hijos son los nodos salidos de la segunda pila empujar el nuevo nodo a la primera pila. Empuje el nuevo operador (carácter) a la segunda pila. Si el siguiente elemento de la cadena es un valor. Cree un nuevo nodo hoja con el valor como sus datos. Nota: El valor puede ser una variable o un número. Empuje la referencia de nodo a la primera pila. Si el siguiente elemento de la cadena es un paréntesis derecho. Mientras que el operador en la parte superior de la segunda pila no es un paréntesis izquierdo. Pop un operador de la pila pop dos nodos de valor de la primera pila crear un nuevo nodo cuyos datos es el operador y cuyos hijos son los nodos aparecidos de la segunda pila empujar el nuevo nodo a la primera pila Pop el paréntesis de la izquierda de la pila (descarte). Una vez agotada la expresión, mientras que la segunda pila no está vacía. Pop un operador de la pila pop dos nodos de valor de la primera pila crear un nuevo nodo cuyos datos es el operador y cuyos hijos son los nodos aparecidos de la segunda pila empujar el nuevo nodo a la primera pila La primera pila ahora debe tener sólo Un elemento en él (una referencia al nodo raíz del árbol de expresión completado). Por lo tanto, pop la primera pila y devolver esta referencia. Los árboles Expression Tree Node Expression tienen tres tipos de nodos. Nodos de operador, nodos de operando que contienen un número específico y nodos de operando que contienen una variable. El hijo de un nodo (operador) puede ser cualquiera de los tres tipos de nodos. Pero un enlace sólo puede referirse a un tipo de objeto. Por lo tanto, se necesita crear un nodo universal que pueda representar las tres opciones. Una implementación de este tipo podría ser la siguiente (esto supone sólo una posibilidad para la variable): Tenga en cuenta que si el campo operador es el carácter n, entonces el nodo es un operando que contiene un número específico. Si el campo operador es el carácter x, entonces el nodo es un operando que contiene la variable. Si el campo del operador es cualquier otra cosa, el nodo es un operador. Evaluación de un árbol de expresión Una vez que se construye un árbol de expresión, puede utilizarse para evaluar la expresión tantas veces como sea necesario ya diferentes valores de sus variables (si las hay). El siguiente algoritmo recursivo se puede utilizar para evaluar el árbol de expresión. Si el nodo raíz es un operando (es decir, hoja), el valor de la expresión son los datos almacenados en el nodo raíz. Si el nodo raíz es un operador, el valor de la expresión es este operador aplicado al valor de su subárbol izquierdo y el valor de su subárbol derecho. Utilizando la implementación de ExpressionTreeNode dada anteriormente, lo siguiente implementaría este algoritmo: Asumiendo la existencia de la declaración. Donde ExpressionTree es un BinaryTree como se definió anteriormente, entonces este método sería ejecutado como sigue. Donde number es el valor de la variable en la expresión. 9. Una implementación vinculada alternativa de árboles binarios Una vista alternativa de un árbol binario es considerar cada nodo como árbol (o al menos la raíz de un árbol). Es decir, en lugar de utilizar dos clases (una clase de nodo de árbol que es utilizada por la clase de árbol binario), se puede usar una sola clase. Esta clase alternativa de árbol binario es esencialmente un nodo. Por lo tanto, la implementación podría ser la siguiente: ¿Qué implementación debe utilizarse?

Comments

Popular Posts