andresnogales

BinarySearchTree.java

Nov 10th, 2021 (edited)
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.42 KB | None | 0 0
  1. public class BinarySearchTree<ELEMENT extends Comparable<ELEMENT>> extends BinaryTree<ELEMENT> {
  2.  
  3.     public BinarySearchTree() {
  4.         super();
  5.     }
  6.  
  7.     public ELEMENT search(ELEMENT item)  {
  8.         BTNode<ELEMENT> result = searchRecursive(root, item);
  9.         if (result != null) return result.item;
  10.         else return null;
  11.     }
  12.    
  13.     public BTNode<ELEMENT> searchRecursive(BTNode<ELEMENT>  root, ELEMENT item)  {
  14.         if (root == null || item.compareTo(root.item) == 0)
  15.             return root;
  16.         if (root.item.compareTo(item) > 0)
  17.             return searchRecursive(root.left, item);
  18.         return searchRecursive(root.right, item);
  19.     }
  20.  
  21.     public void add(ELEMENT item) {
  22.         if (this.root == null) {
  23.             this.root = new BTNode<ELEMENT>(item, null, null);
  24.         } else {
  25.             BTNode<ELEMENT> temp = this.root;
  26.             BTNode<ELEMENT> prev = null;
  27.             while (temp != null ) {
  28.                 prev = temp;
  29.                 if (item.compareTo(temp.item) < 0) {
  30.                     temp = temp.left;
  31.                 } else {
  32.                     temp = temp.right;
  33.                 }
  34.             }
  35.             temp = new BTNode<ELEMENT>(item, null, null);
  36.             if (item.compareTo(prev.item) < 0) {
  37.                 prev.left = temp;
  38.             } else {
  39.                 prev.right = temp;
  40.             }
  41.         }
  42.     }
  43.  
  44.  
  45.     public ELEMENT remove(ELEMENT item) {
  46.         return removeByCopy(item);
  47.     }
  48.  
  49.     private ELEMENT removeByCopy(ELEMENT item) {
  50.        
  51.         BTNode<ELEMENT> find = this.root;
  52.         BTNode<ELEMENT> prev = null;
  53.  
  54.         while ((find != null) && (find.item.compareTo(item) != 0)) {
  55.             prev = find;
  56.             if (item.compareTo(find.item) < 0) {
  57.                 find = find.left;
  58.             } else {
  59.                 find = find.right;
  60.             }
  61.         }
  62.        
  63.         if (find == null) {
  64.             throw new RuntimeException("No existe el elemento o el árbol está vacío");
  65.         } // find es el nodo con el valor a extraer y prev el padre de ese nodo
  66.        
  67.         ELEMENT save = find.item;
  68.         BTNode<ELEMENT> node = find;
  69.        
  70.         if (node.right == null) { // no hay subarbol derecho
  71.             node = node.left; // nodo con un descendiente u hoja
  72.         } else {
  73.             if (node.left == null) { // no hay subarbol izquierdo
  74.                 node = node.right; // nodo con un descendiente u hoja
  75.             } else { // dos descendientes
  76.                 BTNode<ELEMENT> last = node;
  77.                 BTNode<ELEMENT> temp = node.right; // a la derecha (mayores)
  78.                 while (temp.left != null) { // busca a la izquierda el menor
  79.                     last = temp;
  80.                     temp = temp.left;
  81.                 }
  82.                 // temp es el menor de los mayores
  83.                 node.item = temp.item; // hace la copia
  84.                 if (last == node) {
  85.                     last.right = temp.right;
  86.                 } else {
  87.                     last.left = temp.right;
  88.                 }
  89.                 temp.right = null;
  90.             }
  91.         }
  92.        
  93.         // reajustar el arbol
  94.         if (find == this.root) {
  95.             this.root = node;
  96.         } else {
  97.             if (prev.left == find) {
  98.                 prev.left = node;
  99.             } else {
  100.                 prev.right = node;
  101.             }
  102.         }
  103.         return save;
  104.     }
  105.  
  106. }
Add Comment
Please, Sign In to add comment