Practico 9 ej7

Practico 9 ej7

de Agustin Berriel Alcalde -
Número de respuestas: 2

Se considera un árbol binario cuyo nodo es definido de la siguiente manera: 

struct { 

   nodo* izquierdo;

   nodo* derecho; 

   short numero;

 }; 

En donde izquierdo y derecho son punteros a los dos subárboles del nodo. El árbol no tiene por que estar balanceado. El valor null en cualquiera de los índices (derecho o izquierdo) significa que el nodo no tiene un sucesor por la correspondiente rama del árbol.

Me costó un poco interpretar como se distribuye esta estructura en memoria, me gustaría saber si la conclusión a la que llegué es correcta:

Ya que el llamado a la función se hace pasando los parámetros segmento y offset de la dirección del subárbol asumo que tanto izquierdo como derecho son una combinación de segmento y offset y su valor es null cuando ambas son 0, es decir debe ser una palabra (16 bits) en 0. ¿Es correcto esto?

Y si es así, para comprobar si por ejemplo el valor de arbol.izquierdo es 0 siendo que arbol esta en la direccion DS:DX ¿es correcta la operacion CMP word ptr DS:DX, 0? y para arbol.derecho CMP word ptr DS:DX+4, 0

Gracias desde ya

En respuesta a Agustin Berriel Alcalde

Re: Practico 9 ej7

de Federico Rivero -

Estimado:

Ya que el llamado a la función se hace pasando los parámetros segmento y offset de la dirección del subárbol asumo que tanto izquierdo como derecho son una combinación de segmento y offset y su valor es null cuando ambas son 0, es decir debe ser una palabra (16 bits) en 0. ¿Es correcto esto?

Esa frase es correcta excepto en el final. Efectivaemente para que el árbol sea null, tanto el segmento como el desplazamiento deben ser null, pero ambas son palabras de 16 bits.

Y si es así, para comprobar si por ejemplo el valor de arbol.izquierdo es 0 siendo que arbol esta en la direccion DS:DX ¿es correcta la operacion CMP word ptr DS:DX, 0? y para arbol.derecho CMP word ptr DS:DX+4, 0

Y este error es similar al anterior. No basta con verificar que la palabra en DS:[DX] valga 0, eso sería el desplazamiento del árbol, faltaría realizar la comparación de la palabra DS:[DX + 2] con 0. Si ambas palabras valen 0, entonces el árbol izquierdo es NULL. De la misma manera, al comparación del árbol derecho se realiza con cmp word ptr DS:[DX +4], 0 y cmp word ptr DS:[DX + 6]

Saludos!

        Federico