Version:0.9 StartHTML:0000000105 EndHTML:0000006258 StartFragment:0000000152 EndFragment:0000006224
/******************************************************/
/*************** Isidro Pastor Jorda ******************/
/******************************************************/
/****************** Telematica ************************/
/******************** FPII ****************************/
/****************** Practica 6 ************************/
/******************************************************/

#include <iostream.h>
#include <stdlib.h>
#include <string>
#include "ArbolBinario.h"

/*****************************************************************************
* Funcion: Arbol
* Descripcion: Constructor de la clase arbol
*
*
*
* Parametros:
*
* Nombre        E/S       Descripcion
* ------       -----      -----------
*
*
*
*
* Valor devuelto:
*       Inicializa un objeto de la clase arbol
*****************************************************************************/

Arbol::Arbol()
{
    esvacio = true;
    izq = NULL;
    der = NULL;
};


/*****************************************************************************
* Funcion: Arbol
* Descripcion: Constructor de copia de la clase arbol
*
*
*
* Parametros:
*
* Nombre        E/S       Descripcion
* ------       -----      -----------
*
*
*
*
* Valor devuelto:
*       Hace una copia del objeto de la clase arbol que hace la llamada
*****************************************************************************/

Arbol::Arbol (Arbol & ori)
{
    if (!ori.ArbolVacio())
    {
        izq = new Arbol (ori.HijoIzdo());
        der = new Arbol (ori.HijoDcho());
        ori.Informacion (dato);
        esvacio = false;
    }
    else
        esvacio = true;
};

/*****************************************************************************
* Funcion: ~Arbol
* Descripcion: Destructor de la clase arbol
*
*
*
* Parametros:
*
* Nombre        E/S       Descripcion
* ------       -----      -----------
*
*
*
*
* Valor devuelto:
*       Destruye el objeto de la clase arbol que hace la llamada
*****************************************************************************/

Arbol::~Arbol()
{
    if (!esvacio)
    {
        delete izq;
        delete der;
    }
};

/*****************************************************************************
* Funcion: ArbolVacio
* Descripcion: Nos indica si el objeto arbol que hace la llamada esta vacio.
*
*
*
* Parametros:
*
* Nombre        E/S       Descripcion
* ------       -----      -----------
*
*
*
*
* Valor devuelto:
*       True si el objeto arbol esta vacio, false en caso contrario.
*****************************************************************************/

bool Arbol::ArbolVacio()
{
    return (esvacio);
};

/*****************************************************************************
* Funcion: HijoIzdo
* Descripcion: Devuelve el hijo izquierdo del objeto que hace la llamada.
*
*
* Parametros:
*
* Nombre        E/S       Descripcion
* ------       -----      -----------
*
*
*
*
* Valor devuelto:
*       Objeto de clase arbol.
*****************************************************************************/

Arbol & Arbol::HijoIzdo()
{
    return (*izq);
};

/*****************************************************************************
* Funcion: HijoDcho
* Descripcion: Devuelve el hijo derecho del objeto que hace la llamada.
*
*
* Parametros:
*
* Nombre        E/S       Descripcion
* ------       -----      -----------
*
*
*
*
* Valor devuelto:
*       Objeto de clase arbol.
*****************************************************************************/

Arbol & Arbol::HijoDcho()
{
    return (*der);
};

/*****************************************************************************
* Funcion: Informacion
* Descripcion: Obtiene el dato almacenado en el nodo raiz del objeto
*              que hace la llamada.
*
*
* Parametros:
*
* Nombre        E/S       Descripcion
* ------       -----      -----------
*  x            E/S       Variable donde almacenaremos el Dato del nodo raiz
*
*
*
* Valor devuelto:
*       True si existe elemento en el objeto, false en caso contrario.
*****************************************************************************/


bool Arbol::Informacion(Valor & x)
{
    bool ok;

    if(ArbolVacio())
        ok = false;
    else
    {
        ok = true;
        x = dato;
    }
    return ok;
};

/*****************************************************************************
* Funcion: HacerArbol
* Descripcion: Inroduce dato en el objeto que hace la llamada
*
*
*
* Parametros:
*
* Nombre        E/S       Descripcion
* ------       -----      -----------
*  x            E         Variable donde esta almacenado el contenido del nodo raiz
*                          que introducimos
*  i           E/S        Arbol hijo izquierdo
*  d           E/S        Arbol hijo derecho
*
*
* Valor devuelto:
*       void
*****************************************************************************/


void Arbol::HacerArbol(Arbol &i, Valor x, Arbol &d)
{
    esvacio = false;
    dato = x;
    izq = new Arbol(i);
    der = new Arbol(d);
};