logica.ABB.java Source code

Java tutorial

Introduction

Here is the source code for logica.ABB.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package logica;

import org.json.simple.JSONArray;

/**
 *
 * @author jairo
 */
public class ABB<T> {
    private Nodo _root;
    private Nodo _hijoIzq;
    private Nodo _hijoDer;
    private Nodo tmp;

    public ABB() {
        this._root = null;
        this._hijoDer = null;
        this._hijoIzq = null;
        this.tmp = null;

    }

    public Nodo getRoot() {
        return _root;
    }

    public T getData(Nodo tmp) {
        return (T) (tmp.get_data());
    }

    public void setData(Nodo tmp, T pdata) {
        tmp.set_data(pdata);
    }

    public void llenar(JSONArray array) {
        ABB ar = new ABB();
        for (int i = 0; i < array.size(); i++) {
            ar.insertar(array.get(i));
        }
    }

    public void insertar(T pData) {
        if (_root == null)
            _root = new Nodo(pData);
        else {
            tmp = new Nodo(pData);
            insertarAux(tmp, _root);
        }
    }

    private void insertarAux(Nodo pData, Nodo _root) {
        if ((int) pData.get_data() < (int) _root.get_data()) {
            if (_root.getHijoIzq() == null)
                _root.setHijoIzq(pData);
            else
                insertarAux(pData, _root.getHijoIzq());
        } else {
            if (_root.getHijoDer() == null)
                _root.setHijoDer(pData);

            else
                insertarAux(pData, _root.getHijoDer());
        }
    }

    public void Borrar(int pData) {
        if (_root == null)
            return;
        else if ((int) _root.get_data() != pData && _root.getHijoIzq() == null && _root.getHijoDer() == null)
            return;
        else if ((int) _root.get_data() == pData && _root.getHijoIzq() == null && _root.getHijoDer() == null)
            _root = null;
        else if (pData < (int) _root.get_data())
            BorrarAux(_root.getHijoIzq(), _root, pData);
        else if (pData > (int) _root.get_data())
            BorrarAux(_root.getHijoDer(), _root, pData);
        else {
            tmp = mayorMenores(_root);
            Borrar((int) mayorMenores(_root).get_data());
            _root.set_data(tmp.get_data());
        }

    }

    private void BorrarAux(Nodo pNodo, Nodo Padre, int pData) {
        if (pData != (int) pNodo.get_data() && pNodo.getHijoDer() == null && pNodo.getHijoIzq() == null)
            return;
        else if (pData < (int) pNodo.get_data() && pNodo.getHijoIzq() != null)
            BorrarAux(pNodo.getHijoIzq(), pNodo, pData);
        else if (pData > (int) pNodo.get_data() && pNodo.getHijoDer() != null)
            BorrarAux(pNodo.getHijoDer(), pNodo, pData);
        else if (pData == (int) pNodo.get_data() && pNodo.getHijoDer() == null && pNodo.getHijoIzq() == null) {
            if (Padre.getHijoDer().get_data() == pNodo.get_data())
                Padre.setHijoDer(null);
            else
                Padre.setHijoIzq(null);
        } else if (pData == (int) pNodo.get_data() && pNodo.getHijoDer() != null && pNodo.getHijoIzq() == null) {
            tmp = pNodo.getHijoDer();
            pNodo = null;
            Padre.setHijoIzq(tmp);
        } else if (pData == (int) pNodo.get_data() && pNodo.getHijoDer() == null && pNodo.getHijoIzq() != null) {
            tmp = pNodo.getHijoIzq();
            pNodo = null;
            Padre.setHijoIzq(tmp);
        } else {
            if ((int) pNodo.get_data() < (int) Padre.get_data()) {
                tmp = mayorMenores(pNodo);
                Borrar((int) mayorMenores(pNodo).get_data());
                Padre.getHijoIzq().set_data(tmp.get_data());
            } else {
                tmp = mayorMenores(pNodo);
                Borrar((int) mayorMenores(pNodo).get_data());
                Padre.getHijoDer().set_data(tmp.get_data());
            }
        }
    }

    public Nodo mayorMenores(Nodo pNodo) {
        if (pNodo.getHijoIzq() == null)
            return pNodo;
        else if (pNodo.getHijoIzq().getHijoDer() == null)
            return pNodo.getHijoIzq();
        else
            return mayorMenoresAux(pNodo.getHijoIzq().getHijoDer());
    }

    private Nodo mayorMenoresAux(Nodo pNodo) {
        if (pNodo.getHijoDer() == null)
            return pNodo;
        else
            return mayorMenoresAux(pNodo.getHijoDer());
    }

    public boolean Buscar(int pData) {
        if (_root == null)
            return false;
        else if ((int) _root.get_data() != pData && _root.getHijoIzq() == null && _root.getHijoDer() == null)
            return false;
        else if ((int) _root.get_data() == pData)
            return true;
        else if (pData < (int) _root.get_data())
            return BuscarAux(_root.getHijoIzq(), pData);
        else
            return BuscarAux(_root.getHijoDer(), pData);
    }

    private boolean BuscarAux(Nodo pNodo, int pData) {
        if (pData == (int) pNodo.get_data())
            return true;
        else if (pData < (int) pNodo.get_data() && pNodo.getHijoIzq() != null)
            return BuscarAux(pNodo.getHijoIzq(), pData);
        else if (pData > (int) pNodo.get_data() && pNodo.getHijoDer() != null)
            return BuscarAux(pNodo.getHijoDer(), pData);
        else
            return false;
    }

    public void imprimir(ABB arbol) {
        if (arbol.getRoot() == null)
            return;
        else if (arbol.getRoot().getHijoIzq() == null && arbol.getRoot().getHijoDer() == null)
            System.out.println("_root: " + arbol.getRoot().get_data());
        else {
            System.out.println("_root: " + arbol.getRoot().get_data());
            imprimirHIzq(arbol.getRoot().getHijoIzq(), arbol.getRoot());
            imprimirHDer(arbol.getRoot().getHijoDer(), arbol.getRoot());
        }
    }

    private void imprimirHIzq(Nodo pNodo, Nodo Padre) {
        if (pNodo.getHijoIzq() == null && pNodo.getHijoDer() == null)
            System.out.println(pNodo.get_data() + " es HI de: " + Padre.get_data());
        else if (pNodo.getHijoIzq() != null && pNodo.getHijoDer() == null) {
            System.out.println(pNodo.get_data() + " es HI de: " + Padre.get_data());
            imprimirHIzq(pNodo.getHijoIzq(), pNodo);
        } else if (pNodo.getHijoIzq() == null && pNodo.getHijoDer() != null) {
            System.out.println(pNodo.get_data() + " es HI de: " + Padre.get_data());
            imprimirHDer(pNodo.getHijoDer(), pNodo);
        } else if (pNodo.getHijoIzq() != null && pNodo.getHijoDer() != null) {
            System.out.println(pNodo.get_data() + " es HI de: " + Padre.get_data());
            imprimirHIzq(pNodo.getHijoIzq(), pNodo);
            imprimirHDer(pNodo.getHijoDer(), pNodo);
        } else
            return;

    }

    private void imprimirHDer(Nodo pNodo, Nodo Padre) {
        if (pNodo.getHijoIzq() == null && pNodo.getHijoDer() == null)
            System.out.println(pNodo.get_data() + " es HD de: " + Padre.get_data());
        else if (pNodo.getHijoIzq() != null && pNodo.getHijoDer() == null) {
            System.out.println(pNodo.get_data() + " es HD de: " + Padre.get_data());
            imprimirHIzq(pNodo.getHijoIzq(), pNodo);
        } else if (pNodo.getHijoIzq() == null && pNodo.getHijoDer() != null) {
            System.out.println(pNodo.get_data() + " es HD de: " + Padre.get_data());
            imprimirHDer(pNodo.getHijoDer(), pNodo);
        } else if (pNodo.getHijoIzq() != null && pNodo.getHijoDer() != null) {
            System.out.println(pNodo.get_data() + " es HD de: " + Padre.get_data());
            imprimirHIzq(pNodo.getHijoIzq(), pNodo);
            imprimirHDer(pNodo.getHijoDer(), pNodo);
        } else
            return;
    }

}