Advertisement
MaTias0258

Untitled

Nov 9th, 2022
799
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.49 KB | None | 0 0
  1. import javax.swing.JOptionPane;
  2.  
  3.  
  4. public class ArbolAVL {
  5. private NodoArbolAVL raiz;
  6.  
  7.     public ArbolAVL() {
  8.         this.raiz = null;
  9.     }
  10.  
  11.     public NodoArbolAVL obtenerRaiz(){
  12.         return raiz;
  13.     }
  14.     //buscar
  15. public NodoArbolAVL buscar(int d, NodoArbolAVL r){
  16.     if(raiz==null){
  17.         return null;
  18.     }else if(r.dato==d){
  19.         return r;
  20.     }else if(r.dato<d){
  21.         return buscar(d, r.hijoDerecho);
  22.     }else{
  23.         return buscar(d, r.hijoIzquierdo);
  24.     }
  25. }
  26.  
  27.    //obtener factor de equilibrio
  28. public int obtenerFE(NodoArbolAVL x){
  29.     if(x==null){
  30.         return -1;
  31.     }else{
  32.         return x.fe;
  33.     }
  34. }
  35.  
  36. //rotacion simple a la izquierda
  37. public NodoArbolAVL rotacionIzquierda(NodoArbolAVL c){
  38.     NodoArbolAVL auxiliar=c.hijoIzquierdo;
  39.     c.hijoIzquierdo=auxiliar.hijoDerecho;
  40.     auxiliar.hijoDerecho=c;
  41.     c.fe=Math.max(obtenerFE(c.hijoIzquierdo), obtenerFE(c.hijoDerecho))+1;  //obtiene el maximo
  42.     auxiliar.fe=Math.max(obtenerFE(auxiliar.hijoIzquierdo), obtenerFE(auxiliar.hijoDerecho))+1;
  43.     return auxiliar;
  44. }
  45.  
  46. //rotacion simple derecha
  47. public NodoArbolAVL rotacionDerecha(NodoArbolAVL c){
  48.     NodoArbolAVL auxiliar=c.hijoDerecho;
  49.     c.hijoDerecho=auxiliar.hijoIzquierdo;
  50.     auxiliar.hijoIzquierdo=c;
  51.     c.fe=Math.max(obtenerFE(c.hijoIzquierdo), obtenerFE(c.hijoDerecho))+1;  //obtiene el maximo
  52.     auxiliar.fe=Math.max(obtenerFE(auxiliar.hijoIzquierdo), obtenerFE(auxiliar.hijoDerecho))+1;
  53.     return auxiliar;
  54. }
  55.  
  56.  
  57. //rotacion doble a la der
  58. public NodoArbolAVL rotacionDobleIzquierda(NodoArbolAVL c){
  59.     NodoArbolAVL temporal;
  60.     c.hijoIzquierdo= rotacionDerecha(c.hijoIzquierdo);
  61.     temporal=rotacionIzquierda(c);
  62.     return temporal;
  63.  
  64. }
  65. //rotacion doble a la izq
  66. public NodoArbolAVL rotacionDobleDerecha(NodoArbolAVL c){
  67.     NodoArbolAVL temporal;
  68.    c.hijoDerecho= rotacionIzquierda(c.hijoDerecho);
  69.     temporal=rotacionDerecha(c);
  70.     return temporal;
  71. }
  72.  
  73. //insertar avl
  74. public NodoArbolAVL insertarAVL(NodoArbolAVL nuevo, NodoArbolAVL subAr){
  75.     NodoArbolAVL nuevoPadre=subAr;
  76.     if(nuevo.dato<subAr.dato){
  77.         if(subAr.hijoIzquierdo==null){
  78.             subAr.hijoIzquierdo=nuevo;
  79.         }else{
  80.             subAr.hijoIzquierdo=insertarAVL(nuevo, subAr.hijoIzquierdo);
  81.             if((obtenerFE(subAr.hijoIzquierdo)-obtenerFE(subAr.hijoDerecho)==2)){
  82.                 if(nuevo.dato<subAr.hijoIzquierdo.dato){
  83.                     nuevoPadre=rotacionIzquierda(subAr);
  84.                 }else{
  85.                     nuevoPadre=rotacionDobleIzquierda(subAr);
  86.                 }
  87.             }
  88.         }
  89.     }else if(nuevo.dato>subAr.dato){
  90.         if(subAr.hijoDerecho==null){
  91.             subAr.hijoDerecho=nuevo;
  92.         }else{
  93.             subAr.hijoDerecho=insertarAVL(nuevo, subAr.hijoDerecho);
  94.             if((obtenerFE(subAr.hijoDerecho)-obtenerFE(subAr.hijoIzquierdo)==2)){
  95.                 if(nuevo.dato>subAr.hijoDerecho.dato){
  96.                     nuevoPadre=rotacionDerecha(subAr);
  97.                 }else{
  98.                     nuevoPadre=rotacionDobleDerecha(subAr);
  99.                 }
  100.             }
  101.         }
  102.     }else{
  103.         JOptionPane.showMessageDialog(null, "Nodo duplicado");
  104.     }
  105.  
  106.   //actualizar altura
  107.     if((subAr.hijoIzquierdo==null)&&(subAr.hijoDerecho!=null)){
  108.         subAr.fe=subAr.hijoDerecho.fe+1;
  109.     }else if((subAr.hijoDerecho==null)&&(subAr.hijoIzquierdo!=null)){
  110.         subAr.fe=subAr.hijoIzquierdo.fe+1;
  111.     }else{
  112.         subAr.fe=Math.max(obtenerFE(subAr.hijoIzquierdo), obtenerFE(subAr.hijoDerecho))+1;
  113.     }
  114.     return nuevoPadre;
  115. }
  116.  
  117.  
  118. //insertar normal
  119. public void insertar(int d){
  120.    NodoArbolAVL nuevo= new NodoArbolAVL(d);
  121.    if(raiz==null){
  122.        raiz=nuevo;
  123.    }else{
  124.        raiz=insertarAVL(nuevo, raiz);
  125.    }
  126. }
  127.  
  128. //recorridos
  129.     //recorrer in orden
  130.     public void inOrden(NodoArbolAVL r){
  131.         if(r!=null){
  132.             inOrden(r.hijoIzquierdo);
  133.             System.out.println(r.dato);
  134.             inOrden(r.hijoDerecho);
  135.         }
  136.     }
  137.     //recorrer en preorden
  138.     public void preorden(NodoArbolAVL r){
  139.         if(r!=null){
  140.             System.out.println(r.dato);
  141.             preorden(r.hijoIzquierdo);
  142.             preorden(r.hijoDerecho);
  143.         }
  144.     }
  145.     //recorrer postorden
  146.     public void postOrden(NodoArbolAVL r){
  147.          if(r!=null){
  148.             postOrden(r.hijoIzquierdo);
  149.             postOrden(r.hijoDerecho);
  150.              System.out.println(r.dato);
  151.         }
  152.     }
  153.  
  154.    public boolean estaVacio(){
  155.         return raiz==null;
  156.     }
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement