Java implementa el árbol de búsqueda binario e implementa la búsqueda, inserta y elimina las operaciones en el árbol (fusionar y eliminar, copiar y eliminar)
En primer lugar, necesitamos tener una idea de codificación, más o menos como sigue:
1. Búsqueda: de acuerdo con las características de datos del árbol de búsqueda binaria, podemos realizar la búsqueda en función de la comparación de valor de los nodos. Cuando el valor de búsqueda es mayor que el nodo actual, vaya a la derecha y viceversa!
2. Insertar: Debemos saber que todos los nodos insertados son nodos de hoja, por lo que necesitamos encontrar la ubicación del nodo de la hoja que se insertará, y la idea de inserción es consistente con la idea de búsqueda.
3. Eliminar:
1) Fusionar y eliminar: en términos generales, se encontrarán las siguientes situaciones. El nodo eliminado tiene un subárbol izquierdo pero no un subárbol derecho. En este momento, el nodo principal del nodo actual debe apuntar al subárbol izquierdo del nodo actual; Cuando el nodo eliminado tiene un subárbol derecho pero no es un subárbol izquierdo, el nodo principal del nodo actual debe apuntar al subárbol derecho; Cuando el nodo eliminado tiene un subárbol izquierdo y un subárbol derecho, podemos encontrar el nodo más derecho del subárbol izquierdo del nodo eliminado, y luego dejar que el "puntero" derecho o izquierdo de este nodo apunte al subárbol derecho del nodo eliminado
2) Copiar y eliminar: la copia y la eliminación son operaciones de eliminación relativamente simples y también son las operaciones de eliminación más utilizadas. Hay aproximadamente tres situaciones: cuando el nodo actual no tiene subárbol izquierdo y tiene un subárbol derecho, deje que el nodo raíz del subárbol de la derecha actual reemplace el nodo eliminado; Cuando el nodo actual no tenga un subárbol derecho y tenga un subárbol izquierdo, deje que el nodo raíz del subárbol izquierdo actual y reemplace el nodo eliminado; Cuando el nodo eliminado actualmente tiene un subárbol izquierdo y un subárbol derecho, necesitamos encontrar el subárbol del nodo eliminado, y encontrar el nodo más derecho en el subárbol izquierdo y asignar el valor de este nodo al nodo eliminado, y luego no olvidar que el "podero" del nodo principal apunte al substuito está vacío (en realidad, no importa en JAVA, y hay una eliminación de arrastre de herretera, y está allí, y allí está un arrastre. procesarlo). También puede implementar este proceso como un nodo independiente en el nodo más izquierdo del subárbol derecho del nodo actualmente eliminado.
A continuación, agregemos el código.
En primer lugar, ## Clase de nodo de árbol de búsqueda binaria ##
paquete searchBinaryTree; public class SearchBinaryTreeNode <T> {t data; SearchBinaryTeNode PublicBinaryTreeNODE <T> LeftChild; Public SearchBinaryTreeNode <T> RightChild; public SearchBinaryTreeNode () {this.data = null; this.leftchild = this.rightChild = null; } public SearchBinaryTeNode (t da) {this.data = da; this.leftchild = this.rightChild = null; } public SearchBinaryTeNode (t da) {this.data = da; this.leftchild = this.rightChild = null; } public SearchBinaryTeNode (t da, searchBinaryTreeNode <T> izquierda, searchBinaryTreeNode <T> Right) {this.data = da; this.leftchild = izquierda; this.rightChild = Right; } public t getData () {return data; } public void setData (t data) {this.data = data; } public SearchBinaryTreeNode <T> getLeftChild () {return Leftchild; } public void setleftChild (SearchBinaryTreeNode <T> LeftChild) {this.leftChild = LeftChild; } public SearchBinaryTreeNode <T> getRightChild () {return rightchild; } public void setRightChild (SearchBinaryTreeNode <T> RightChild) {this.rightChild = rightChild; } public boolean isleaf () {if (this.leftchild == null && this.rightChild == null) {return true; } return false; }}Implementación de un árbol de búsqueda binario
Package SearchBinaryTree; public class SearchBinaryTree <T> {SearchBinaryTeNeDe <T> root; public boolean isEtimty () {if (root == null) {return true; } return false; } visita public void (SearchBinaryTreeNode <T> root) {if (root == null) {System.out.println ("¡Este árbol está vacío!"); } System.out.println (root.getData ()); } public SearchBinaryTreeNode <T> getRoot () {if (root == null) {root = new SearchBinaryTreeNode <T> (); } return root; } public SearchBinaryTree () {this.root = null; } /** Crear un árbol binario* / public void CreateTree (SearchBinaryTreeNode <T> nodo, t data) {if (root == null) {root = new SearchBinaryTreeNode <T> (); } else {if (math.random ()> 0.5) {// crea un árbol binario de una manera aleatoria if (node.leftchild == null) {node.leftchild = new SearchBinaryTreeNode <T> (data); } else {createTree (node.leftchild, data); }} else {if (node.rightChild == null) {node.rightChild = new SearchBinaryTreeNode <T> (data); } else {createTree (node.rightchild, data); }}}}} /** Buscar en el segundo árbol de búsqueda de búsqueda* / público SearchBinaryTreeNode <T> Search (SearchBinaryTreeNode <T> root, t value) {searchBinaryTreenode <T> current = root; while ((root! = null) && (current.getData ()! = valor)) {// debe tenerse en cuenta que los genéricos en Java no pueden comparar los tamaños. En uso real, podemos usar tipos de datos comunes para reemplazar este genérico, por lo que no habrá errores. Current = (value <current.getData ()? Search (current.leftchild, value): search (current.rightchild, value)); } retorno actual; } public SearchBinaryTreeNode <T> InsertNode (T value) {SearchBinaryTreeNode <T> p = root, pre = null; while (p! = null) {pre = p; // Cabe señalar que los genéricos en Java no pueden comparar los tamaños. En uso real, podemos usar tipos de datos comunes para reemplazar este genérico, de modo que no haya errores si (p.getData () <valor) {p = P.RightChild; } else {p = p.leftchild; }} if (root == null) {root = new SearchBinaryTreeNode <T> (valor); } else if (pre.getData () <valor) {pre.rightChild = new SearchBinaryTreeNode <T> (valor); } else {pre.leftChild = new SearchBinaryTreeNode <T> (valor); }} /** Fusionar y eliminar* / public void DeleteByMerging (SearchBinaryTreeNode <T> nodo) {SearchBinaryTreeNode <T> temp = node; if (node! = null) {// Si el nodo eliminado no tiene un subárbol derecho, use el nodo raíz de su subárbol izquierdo para reemplazar el nodo eliminado if (node.right! = null) {node = node.leftchild; } else if (node.leftchild == null) {// Si el nodo eliminado no tiene un subárbol izquierdo, use el nodo más izquierdo con el recuento de palabras en lugar del nodo eliminado = node.rightchild; } else {// Si los subtrotes izquierdo y derecho de los nodos eliminados tienen temp = node.leftChild; while (temp.rightchild! = null) {temp = temp.rightchild; // Encuentra el nodo derecho del subárbol izquierdo} // Asigne el puntero derecho del nodo encontrado al subárbol derecho del nodo eliminado temp.rightchild = node.rightchild; temp = nodo; nodo = node.leftchild; } temp = null; }} / * * Copiar y eliminar * / public void DeleteByCoping (SearchBinaryTreeNode <T> nodo) {SearchBinaryTreeNode <T> pre = null; SearchBinaryTreeNode <T> temp = node; // Si el nodo eliminado no tiene un subárbol derecho, use el nodo raíz de su subárbol izquierdo para reemplazar el nodo eliminado if (node.rightchild == null) {node = node.leftchild; } else if (node.leftchild == null) {node = node.rightchild; } else {// Si los subtrotes izquierdo y derecho de los nodos eliminados tienen temp = node.leftChild; pre = nodo; while (temp.rightchild! = null) {pre = temp; temp = temp.rightchild; // viajar para encontrar el nodo más derecho del subárbol izquierdo} node.data = temp.data; // Realizar la operación de asignación if (pre == nodo) {pre.leftchild = node.leftchild; } else {pre.rightchild = node.rightchild; }} temp = null; }}Clase de prueba
SearchBinaryTree de paquetes; public Class SearchBinaryTreetest {public static void main (string [] args) {searchBinaryTree <Integer> tree = new SearchBinaryTree <Integer> (); para (int i = 1; i <10; i ++) {tree.createTree (new SearchBinaryTreeNode <Integer> (), i); } // buscar árbol.search (tree.root, 7); // fusionar y eliminar árbol.deletebymerging (nuevo SearchBinaryTreeNode <integer> (8)); // copiar y eliminar árbol.deleteByCoping (nuevo SearchBinaryTreeNode <integer> (6)); }}Ok, eso es todo!
El artículo anterior Java crea un árbol de búsqueda binario e implementa los ejemplos de operación de búsqueda, inserción y eliminación de la eliminación son todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.