Este documento describe la implementación de un árbol binario de búsqueda (BST) en Java. Define una clase NodoArbol que representa cada nodo del árbol, con campos para el dato, hijo izquierdo e hijo derecho. Incluye métodos para insertar nodos, buscar nodos, y eliminar nodos del árbol. El método de eliminación trata diferentes casos dependiendo de si el nodo a eliminar tiene 0, 1 o 2 hijos, reemplazándolo con su sucesor cuando tiene 2 hijos.
1. class NodoArbol{ int Dato; NodoArbol izq; NodoArbol der; public NodoArbol (int dato){ this.dato=dato; izq=der=null; }}public void insertar (int dato){ NodoArbo nuevonodo= new NodoArbol(dato); if (raíz == null) raíz = nuevonodo;else { NodoArbol actual = raíz; NodoArbol p; while(true) { p= actual; if (dato < actual.dato) //ir a la izquierda { actual = actual.izq; if (actual == null ) { p.izq = nuevonodo; return; } } //fin ir a la izquierda else //es mayor { actual = actual.der; if (actual == null) { p.der = nuevonodo; return; } } //fin else ir derecha } //fin while } //fin else no raíz} //fin insert public NodoArbol find (int llave){ Nodo actual = raíz; while (actual.dato != llave) { if (llave menor actual.dato) actual = actual.izq; else actual = actual.der; if (actual == null) return null;} //fin while return actual;}<br />public boolean delete (int llave){ NodoArbol actual = raíz; NodoArbol p = raíz; Boolean hijoizq= true; while (actual.Dato != llave) { p= actual; if (llave < actual.Dato) { hijoizq= true; actual.actual.izq // va a la izquierda } else { hijoizq= false; actual= actual.der // va a la derecha } if (actual == null) // no lo encontro return false; } // fin while // encontro el nodo a borrar// si no tiene hijo, simplemente lo borraif (actual.izq == null && actual.der == null) { (if actual == raiz) // si es la raíz root = null;// el árbol esta vacío else if(hijoizq) p.izq = null //lo desconecta de p else p.der = null; }// si no tiene hijo derecho, lo reemplaza con el subárbol izquierdoelse if( actual.der == null) if (actual == raiz) raiz = actual.izq; else if (hijoizq) p.izq =actual.izq; else p.der= actual.izq; // si no tiene hijo izquierdo, lo reemplaza con el subarbol derecho else if (actual.izq == null) if (actual == raiz) raiz = actual.der; else if (hijoizq) p.izq =actual.der; else p.der= actual.der; else // tiene dos hijos, es reemplazado por el sucesor { // llama al metodo obtener sucesor del nodo a borrar (actual) Nodo sucesor = getSucesor (actual); // conecta p de actual con el sucesor if (actual ==raiz) raiz = sucesor; else if (hijoizq) p.izq= sucesor; else p.der=succesor; successor.izq = actual.izq //conecta sucesor con la rama izq de actual } //fin tiene dos hijos return true; } fin borrarprivate NodoArbol getSucesor(Nodo delNodo) { NodoArbol sucerorp= delNodo; NodoArbol sucesor = delNodo; NodoArbol actual= delNodo.der; / va al hijo derecho while (actual != null) { sucesorp = sucesor; sucesor = actual; actual = actual.izq; } // if (sucesor != delNodo.der) { sucesorp.izq= sucesor.der; sucesor.der = delNodo.der; } return sucesor; } // fin getSucesor<br />Tarea, hacer la prueba de escritorio borrando los nodos del ejemplo mostrado.<br />