Advertisement
LaCaraDeLaVerga

nodo ABB + ABB + Main

Jun 7th, 2016
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.24 KB | None | 0 0
  1. //   NODO
  2. import java.util.ArrayList;
  3.  
  4. public class NodoABB {
  5.     Integer info;
  6.     public NodoABB izq;
  7.     public NodoABB der;
  8.    
  9.     public NodoABB (int info){
  10.         this.info = info;
  11.         izq=der= null;
  12.     }
  13.    
  14.    
  15.     public void insertar(NodoABB nuevo){
  16.         if (info > nuevo.info){
  17.             if (izq == null)
  18.                 izq = nuevo;
  19.             else
  20.                 izq.insertar(nuevo);
  21.         }else{
  22.             if (der == null)
  23.                 der = nuevo;
  24.             else
  25.                 der.insertar(nuevo);
  26.         }
  27.     }
  28.    
  29.    
  30.     public void eliminar(NodoABB padre, String izqDer, int info){
  31.         if (this.info == info){
  32.             if (esHoja()){
  33.                 if (izqDer == "izq"){   //vine por izquierda
  34.                     padre.izq = null;
  35.                 }else{
  36.                     padre.der = null;
  37.                 }
  38.             }else{  // por hipotesis tengo derecha o izquieda
  39.                 if (izq != null ){  //tomo el maximo de la izquierda
  40.                     this.info = izq.maximo();
  41.                     izq.eliminar(this, "izq", this.info);
  42.                 }else{
  43.                     this.info = der.minimo();
  44.                     der.eliminar(this, "der", this.info);
  45.                 }
  46.             }
  47.         }else{  //iteracion
  48.             if (info<this.info && izq != null )
  49.                 izq.eliminar(this,"izq", info);
  50.             if (info>this.info && der != null)
  51.                 der.eliminar(this,"der", info);
  52.         }
  53.     }
  54.    
  55.    
  56.     boolean pertenece(int dato){
  57.         if (dato==this.info)
  58.             return true;
  59.         if(dato<info && izq!=null)
  60.             return izq.pertenece(dato);
  61.         if(dato>info && der!=null)
  62.             return der.pertenece(dato);
  63.         return false;
  64.     }  
  65.    
  66.    
  67.     int cantNodos(){
  68.         int ret= 1;
  69.        
  70.         if (izq!=null)
  71.             ret= ret + izq.cantNodos();
  72.         if (der!=null)
  73.             ret= ret + der.cantNodos();
  74.         return ret;
  75.     }  
  76.    
  77.    
  78.     public int altura(){    //cota superior O(n^2)
  79.         int altIzq = 0, altDer= 0;
  80.        
  81.         if(izq!=null)
  82.             altIzq= izq.altura();
  83.         if(der!=null)
  84.             altIzq= der.altura();
  85.        
  86.         return 1 +  Math.max( altIzq, altDer );
  87.     }  
  88.    
  89.    
  90.     boolean balanceado(){   //O(log n)
  91.         Integer altI= 0, altD= 0;
  92.        
  93.         if(izq!=null)
  94.             altI= izq.altura();
  95.         if(der!=null)
  96.             altD= der.altura();
  97.        
  98.         boolean ret= true;
  99.        
  100.         ret = Math.abs(altI-altD) <=1;
  101.    
  102.         if (izq!=null)
  103.             ret= ret && izq.balanceado();
  104.         if (der!=null)
  105.             ret= ret && der.balanceado();
  106.        
  107.         return ret;
  108.     }
  109.    
  110.    
  111.     public Integer balanceado2() {  //O(n)
  112.         Integer altI= 0, altD= 0;
  113.        
  114.         if (izq!=null)
  115.             altI= izq.balanceado2();
  116.         if (der!=null)
  117.             altD= der.balanceado2();
  118.        
  119.         if( altI < 0 || altD < 0 )
  120.             return -1;
  121.         if(Math.abs(altI- altD) >1)
  122.             return -1;
  123.         else
  124.             return 1 + Math.max(altI, altD);
  125.     }  
  126.    
  127.    
  128.     public void imprimirPreOrden() {    // PREORDEN=    Actual + Pre(izq) + Pre(der)
  129.         System.out.println(info + " ");
  130.        
  131.         if(izq!=null)
  132.             izq.imprimirPreOrden();
  133.        
  134.         if(der!=null)
  135.             der.imprimirPreOrden();
  136.     }
  137.    
  138.  
  139.     public void imprimirInOrden() {     //INORDEN=  In(izq) + Actual + In(der)
  140.         if(izq!=null)
  141.             izq.imprimirInOrden();
  142.        
  143.         System.out.println(info + " ");
  144.        
  145.         if(der!=null)
  146.             der.imprimirInOrden();
  147.     }
  148.  
  149.    
  150.     public void toListPreOrden(ArrayList<Integer> lista) {  // PREORDEN=    Actual + Pre(izq) + Pre(der)
  151.         lista.add(info);
  152.        
  153.         if(izq!=null)
  154.             izq.toListInOrden(lista);
  155.        
  156.         if(der!=null)
  157.             der.toListInOrden(lista);
  158.     }
  159.  
  160.    
  161.     public void toListInOrden(ArrayList<Integer> lista) {       //INORDEN=  In(izq) + Actual + In(der)
  162.         if(izq!=null)
  163.             izq.toListInOrden(lista);
  164.        
  165.         lista.add(info);
  166.        
  167.         if(der!=null)
  168.             der.toListInOrden(lista);
  169.     }
  170.    
  171.    
  172.     public void clonarArbol(ABB nuevoArbol) {  
  173.        
  174.         if(izq!=null)
  175.             izq.clonarArbol(nuevoArbol);
  176.        
  177.         nuevoArbol.insertar(info);
  178.        
  179.         if(der!=null)
  180.             der.clonarArbol(nuevoArbol);
  181.     }  
  182.    
  183.    
  184.     public String toString(){   // inOrder
  185.         String ret ="";
  186.         if (izq != null) ret = ret + izq.toString();
  187.             ret =ret + info + " ";
  188.         if (der != null) ret = ret + der.toString();
  189.             return ret;
  190.     }  
  191.    
  192.    
  193.     public NodoABB buscar (NodoABB raíz, int dato){
  194.         NodoABB actual = raíz;
  195.         while (actual.info != dato) {
  196.             if (dato < actual.info)
  197.                 actual = actual.izq;
  198.             else
  199.                 actual = actual.der;
  200.             if (actual == null)
  201.                 return null;
  202.         }
  203.         return actual;
  204.     }
  205.    
  206.  
  207.     private Integer minimo() {
  208.         int min;
  209.         if(this.izq==null)
  210.             min= this.info;
  211.         else
  212.             min= this.izq.minimo();
  213.         return min;
  214.     }
  215.    
  216.  
  217.     private Integer maximo() {
  218.         int max;
  219.         if(this.der==null)
  220.             max= this.info;
  221.         else
  222.             max= this.der.maximo();
  223.         return max;
  224.     }
  225.    
  226.  
  227.     public boolean esHoja(){
  228.         return (izq == null) && (der == null);
  229.     }
  230.    
  231. }
  232. //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  233. //   ABB
  234. import java.util.ArrayList;
  235. import java.util.List;
  236.  
  237. public class ABB {
  238.     public NodoABB raiz;
  239.     //No tenemos constructor!
  240.    
  241.     public void insertar(int info){
  242.         NodoABB nuevo = new NodoABB(info);
  243.         if (raiz == null){
  244.             raiz = nuevo;
  245.         }else{
  246.             raiz.insertar(nuevo);
  247.         }
  248.     }
  249.  
  250.    
  251.     public void eliminar(int info){
  252.         if (raiz != null){      //caso base1
  253.             if (raiz.info == info && raiz.esHoja()){    //caso base2
  254.                 raiz = null;
  255.             }else{
  256.                 raiz.eliminar(null,null, info); // (el raiz no tiene padre)
  257.             }
  258.         }
  259.     }
  260.    
  261.    
  262.     boolean pertenece(int dato){
  263.         if (raiz==null)
  264.             return false;
  265.         else return raiz.pertenece(dato);
  266.     }
  267.    
  268.    
  269.     int cantNodos(){
  270.         int ret= 0;
  271.         if(raiz!=null)
  272.             ret= raiz.cantNodos();
  273.         return ret;
  274.     }
  275.    
  276.    
  277.     int altura(){
  278.         if(raiz!=null)
  279.             return raiz.altura();
  280.         return 0;          
  281.     }
  282.    
  283.    
  284.     boolean balanceado(){
  285.         if(raiz==null)
  286.             return true;
  287.         else
  288.             return raiz.balanceado();
  289.     }
  290.    
  291.    
  292.     boolean balanceado2(){
  293.         if(raiz==null)
  294.             return true;
  295.         else
  296.             return raiz.balanceado2() >-1;
  297.     }
  298.    
  299.    
  300.     public void imprimirPreOrden(){
  301.         if(raiz==null)
  302.             System.out.println("<Arbol vacio>");
  303.         else
  304.             raiz.imprimirPreOrden();
  305.     }
  306.    
  307.    
  308.     public void imprimirInOrden(){
  309.         if(raiz==null)
  310.             System.out.println("<Arbol vacio>");
  311.         else
  312.             raiz.imprimirInOrden();
  313.     }
  314.    
  315.    
  316.     public ArrayList<Integer> toListPreOrden() {    //PREORDEN= Actual + Pre(izq) + Pre(der)
  317.         ArrayList<Integer> lista= new ArrayList<Integer>();
  318.         if(raiz!=null)
  319.             raiz.toListPreOrden(lista);
  320.         return lista;
  321.     }
  322.    
  323.    
  324.     public ArrayList<Integer> toListInOrden() {
  325.         ArrayList<Integer> lista= new ArrayList<Integer>();
  326.         if(raiz!=null)
  327.             raiz.toListInOrden(lista);
  328.         return lista;
  329.     }
  330.    
  331.    
  332.     public ABB clonarArbol(){
  333.         ABB nuevoArbol= new ABB();
  334.         if( raiz!=null ){
  335.             raiz.clonarArbol(nuevoArbol);
  336.         }
  337.         return nuevoArbol;
  338.     }
  339.    
  340.    
  341.     public String toString(){
  342.         String ret= " ";
  343.         if (raiz!=null)
  344.                 ret= raiz.toString();
  345.         return ret;
  346.     }
  347. }
  348. //^&^&^&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  349. //   MAIN
  350. package clase4b;
  351.  
  352. public class Main {
  353.  
  354.     public static void main(String[] args) {
  355.         ABB a= new ABB();
  356.         ABB b= new ABB();
  357.        
  358.        
  359.         a.insertar(8);
  360.         a.insertar(5);
  361.         a.insertar(6);
  362.         a.insertar(4);
  363.         a.insertar(10);
  364.         a.insertar(9);
  365.         a.insertar(11);
  366.        
  367.         b= a.clonarArbol();
  368.        
  369.         b.eliminar(6);
  370.         a.eliminar(9);
  371.        
  372.         System.out.println("Arbol a: " + a.toString());
  373.         System.out.println("Arbol b: " + b.toString());
  374.        
  375.         System.out.println( "cantidad de nodos en a: " + a.cantNodos() );
  376.         System.out.println( "altura en b: " + b.altura() );
  377.         System.out.println( "a esta balanceado? " + a.balanceado() );
  378.        
  379.         System.out.println("Pertenece? " + a.pertenece(6));
  380.  
  381.     }
  382.  
  383. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement