Java tutorial
/* * 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; } }