Latest News

Codigo Fuente JAVA: Arbol Binario de busqueda



public class Arbol{
    private NodoA raiz;
  
    public boolean empty(){
        if(getRaiz()==null){
            return true;
        }
        return false;
    }

public void insert(NodoA dato){      
         NodoA aux=getRaiz();       
            
        if(empty()){
            setRaiz(dato);
        }else{
              
            do{
            if(dato.getDescripcion().compareTo(aux.getDescripcion())<0){
                if(aux.getIzq()==null){
                    aux.setIzq(dato);
                }else
                aux=aux.getIzq();
            }else{
                if(aux.getDer()==null){
                    aux.setDer(dato);
                }else
                    aux=aux.getDer();
            }
            }while(aux.getDer()!=dato && aux.getIzq()!=dato);
        }       
                       
    }
public nodo eliminar(String num){
        nodo aux=getRaiz();
        nodo padre=getRaiz();
        while(aux!=null && aux.getNo_control().compareTo(num)!=0){
        padre=aux;  
        if(num.compareTo(aux.getNo_control())<0){
            aux=aux.getIzq();          
        }else
            aux=aux.getDer();
     
        }
        if(aux==null){
            return aux;
        }
        if(aux.getDer()==null && aux.getIzq()==null){
            if(padre.getIzq()==aux){
                padre.setIzq(null);
            }else
                padre.setDer(null);
            return aux;
        }
        //Caso Hijo.
        if((aux.getIzq() != null && aux.getDer() == null)
        || (aux.getIzq() == null && aux.getDer() != null))
        {
            if(padre == aux){//Caso Raíz.          
                if(aux.getIzq() != null){
                    raiz = aux.getIzq();
                }
                else{
                    raiz = aux.getDer();
                }
            }
            else{
                if(aux.getIzq() == null){
                    if(aux.getNo_control().compareTo(padre.getNo_control())<0){
                        padre.setIzq(aux.getDer());
                    }
                    else{
                        padre.setDer(aux.getDer());
                    }
                }
                else{
                    if(aux.getNo_control().compareTo(padre.getNo_control())<0){
                        padre.setIzq(aux.getIzq());
                    }
                    else{
                        padre.setDer(aux.getIzq());
                    }
                }
            }  
        }//Cierra caso de un hijo.
     
        /caso 2 hijos
        if(aux.getDer()!=null && aux.getIzq()!=null){
            NodoA aux2=aux;//Guarda la referencia del nodo a eliminar.
            aux=aux2.getDer();
            NodoA padre2=aux;
            if(aux2==getRaiz()){
             if(aux.getIzq()==null){
                 aux.setIzq(raiz.getIzq());
                 raiz=aux;
             }else{
                 do{
                     padre2=aux;
                     aux=aux.getIzq();
                 }while(aux.getIzq()!=null);
                 if(aux.getDer()!=null){
                     padre2.setIzq(aux.getDer());
                     aux.setIzq(aux2.getIzq());
                     aux.setDer(aux2.getDer());
                     raiz=aux;
                 }else{
                     padre2.setIzq(null);
                     aux.setIzq(aux2.getIzq());
                     aux.setDer(aux2.getDer());
                     raiz=aux;
                 }
             } 
            }else{                  //termina caso base
                //caso nodo mayor al ´padre
                if(aux2.getDescripcion().compareTo(padre.getDescripcion())>0){
                    if(aux.getIzq()==null){
                        aux.setIzq(aux2.getIzq());
                        padre.setDer(aux);
                    }else{
                        do{
                            padre2=aux;
                            aux=aux.getIzq();
                        }while(aux.getIzq()!=null);
                        if(aux.getDer()!=null){
                            padre2.setIzq(aux.getDer());
                            aux.setIzq(aux2.getIzq());
                            aux.setDer(aux2.getIzq());
                            padre.setDer(aux);
                        }else{
                            padre2.setIzq(null);
                            aux.setIzq(aux2.getIzq());
                            aux.setDer(aux2.getDer());
                            padre.setDer(aux);
                        }
                    }
                  
                }//termina caso nodo mayor al padre
              
                 //inicia caso nodo menor a padre
                else{
                    if(aux.getIzq()==null){
                        aux.setIzq(aux2.getIzq());
                        padre.setIzq(aux);
                    }else{
                        do{
                            padre2=aux;
                            aux=aux.getIzq();
                        }while(aux.getDer()!=null);
                        if(aux.getDer()!=null){
                            padre2.setIzq(aux2.getDer());
                            aux.setIzq(aux2.getIzq());
                            aux.setDer(aux2.getDer());
                            padre.setIzq(aux);
                        }else{
                            padre2.setIzq(null);
                            aux.setIzq(aux2.getIzq());
                            aux.setDer(aux2.getDer());
                            padre.setIzq(aux);
                        }
                    }
                }
            }return aux2;              
        }//Termina caso de dos hijos.
        return aux;
     
    }

public void inorden(NodoA in){
        if(in!=null){
            inorden(in.getIzq());
            JOptionPane.showMessageDialog(null,"ARTICULO"+in.getDescripcion()+"\n"+
                     "CANTIDAD"+in.getCantidad());
            inorden(in.getDer());
        }
    }
  
    public void preorden(NodoA pre){      
        if(pre!=null){
             JOptionPane.showMessageDialog(null,"ARTICULO"+pre.getDescripcion()+"\n"+
                     "CANTIDAD"+pre.getCantidad());    
            preorden(pre.getIzq());          
            preorden(pre.getDer());          
        }
      
    }
    public void posorden(NodoA pos){
        if(pos!=null){
            posorden(pos.getIzq());
            posorden(pos.getDer());
           JOptionPane.showMessageDialog(null,"ARTICULO"+pos.getDescripcion()+"\n"+
                     "CANTIDAD"+pos.getCantidad());
        }
    }

 double s = 0;
    public void suma_costos(String cat,NodoA suma){       
         if(suma!=null){
            suma_costos(cat,suma.getIzq());
            suma_costos(cat,suma.getDer());            
            if(cat.compareTo(suma.getCategoria())==0){
                s=s+suma.getCosto();               
                JOptionPane.showMessageDialog(null,"CATEGORIA: "+suma.getCategoria()+"\n"+
                     "COSTO: "+ s , "COSTOS" , JOptionPane.INFORMATION_MESSAGE);               
           }
           
        }
       
    }

public void pos_cat(String cat,NodoA pos){
        if(pos!=null){
            pos_cat(cat,pos.getIzq());
            pos_cat(cat,pos.getDer());
            if(cat.compareTo(pos.getCategoria())==0){
            JOptionPane.showMessageDialog(null,"ARTICULO: "+pos.getDescripcion()+"\n"+
                     "CANTIDAD: "+pos.getCantidad() , cat , JOptionPane.INFORMATION_MESSAGE);   
            }
        }
       
    }

No hay comentarios.:

Publicar un comentario

Ibit-Up Designed by Templateism.com Copyright © 2014

Con tecnología de Blogger.