You are on page 1of 14

ARBOLES EQUILIBRADOS

package NECTAR; import javax.swing.*; class NODO { private int info; public NODO iz; public NODO dr; public String resultado=""; public NODO(int n) { info=n; iz=dr=null; } public void ingresa(int m) { if(m<this.info) { if(iz==null) { iz=new NODO(m); } else iz.ingresa(m); } else { if(m>info) { if(dr==null) { dr=new NODO(m); } else dr.ingresa(m); } } } public void buscar(int m) { if(m<info)

{ if(iz!=null) { if(iz.sacarinfo()==m) JOptionPane.showMessageDialog(null, "Econtrado"); else iz.buscar(m); } else JOptionPane.showMessageDialog(null, "noEcontrado"); } else if(m>info) { if(dr!=null) { if(dr.sacarinfo()==m) { JOptionPane.showMessageDialog(null, "EcontradoD"); } else dr.buscar(m); } else JOptionPane.showMessageDialog(null, "noEcontradoD"); } } public void eliminar(int datoABorrar) { if(datoABorrar<info) { if(iz!=null) { if(iz.sacarinfo()==datoABorrar) { if(iz.sacarDerecho()==null && iz.sacarIzquierdo()==null) { iz=null; } else if(iz.sacarIzquierdo()==null && iz.sacarDerecho()!=null) { iz=iz.sacarDerecho(); } else if(iz.sacarIzquierdo()!=null && iz.sacarDerecho()==null) { iz=iz.sacarIzquierdo(); }

else { enlazar_SUBARIZalMASIZdDER(iz.sacarIzquierdo(), iz.sacarDerecho()); iz=iz.sacarDerecho(); } } else iz.eliminar(datoABorrar); } else JOptionPane.showMessageDialog(null, "noEcontrado"); } else if(datoABorrar>info) { if(dr!=null) { if(dr.sacarinfo()==datoABorrar) { if(dr.sacarDerecho()==null && dr.sacarIzquierdo()==null) { dr=null; } else if(dr.sacarIzquierdo()==null && dr.sacarDerecho()!=null) { dr=dr.sacarDerecho(); } else if(dr.sacarIzquierdo()!=null && dr.sacarDerecho()==null) { dr=dr.sacarIzquierdo(); } else { enlazar_SUBARIZalMASIZdDER(dr.sacarIzquierdo(), dr.sacarDerecho()); dr=dr.sacarDerecho(); } } else dr.eliminar(datoABorrar); } else JOptionPane.showMessageDialog(null, "noEcontradoD"); } } public void enlazar_SUBARIZalMASIZdDER(NODO izq,NODO der) {

while(der.sacarIzquierdo()!=null) { der=der.sacarIzquierdo(); } der.iz=izq; } public int sacarinfo() { return info; } public NODO sacarDerecho() { return dr; } public NODO sacarIzquierdo() { return iz; } public void enlaceiz(NODO p) { iz=p; } public void enlacedr(NODO p) { dr=p; } } ///////////////////////////////////////////////////////////////////////////// package NECTAR; import javax.swing.*; import java.awt.Graphics; class ARBOL { private NODO raiz; private String salida=""; public String sacarSalida() { return salida; } public ARBOL() { raiz=null; } public NODO sacarRaiz() { return raiz; }

public boolean estavacia() { return raiz==null; } public void ingresar(int n) { if(raiz==null) raiz=new NODO(n); else raiz.ingresa(n); } public void ingreso() { String a,b; int m,n; a=JOptionPane.showInputDialog("INGRESE LA CANTIDAD"); n=Integer.parseInt(a); for(int i=1; i<=n; i++) { b=JOptionPane.showInputDialog("INGRESE DATO"); m=Integer.parseInt(b); this.ingresar(m); } } public void visualizar(NODO raiz) { //String salida="dato"; if(raiz==null) return ; //salida=salida+raiz.sacarinfo(); salida=salida+" "+raiz.sacarinfo()+" "; visualizar(raiz.sacarIzquierdo()); //JOptionPane.showMessageDialog(null," "+raiz.sacarinfo()+" "); visualizar(raiz.sacarDerecho()); } public void visualiza() { String salida=""; JOptionPane.showMessageDialog(null,salida); } public void buscar(int I) { if(raiz.sacarinfo()==I) { System.out.println("dato encontrado"); return; } else raiz.buscar(I); }

public int contarHojas(NODO raiz) { if(raiz==null) { return 0; } if(raiz.sacarDerecho()== null && raiz.sacarIzquierdo()==null) { return 1+contarHojas(raiz.sacarDerecho()) +contarHojas(raiz.sacarIzquierdo()); } return contarHojas(raiz.sacarDerecho()) +contarHojas(raiz.sacarIzquierdo()); } public void eliminar_nodo(int n) { if(raiz==null) { JOptionPane.showMessageDialog(null,"arbol vacio"); } else if(raiz.sacarinfo()==n) { raiz.enlazar_SUBARIZalMASIZdDER(raiz.sacarIzquierdo(), raiz.sacarDerecho()); raiz=raiz.sacarDerecho(); } else raiz.eliminar(n); } public String visualizopre() { // String salida=""; salida=""; visualizar(raiz); return salida; /*/if(raiz==null) return; else { if(raiz==null && raiz.sacarIzquierdo()!=null && raiz.sacarDerecho()!=null) {salida=salida+raiz.sacarinfo() ; visualizarpreOrden(raiz.sacarIzquierdo()); visualizarpreOrden(raiz.sacarDerecho());} } JTextArea area=new JTextArea(); area.setText(salida);

JOptionPane.showMessageDialog(null,area,"Preorden",JOptionPane.INFORMATION_M ESSAGE);/*/ } public void visualizarHojas(NODO raiz) { String a=""; if(raiz==null) return; if(raiz.sacarIzquierdo()==null && raiz.sacarDerecho()== null) visualizarHojas(raiz.sacarIzquierdo()); a=a+raiz.sacarinfo(); visualizarHojas(raiz.sacarDerecho()); } public void espejo(NODO ra) { if(ra==null) { return; } NODO t; t=ra.sacarIzquierdo(); ra.iz=ra.sacarDerecho(); ra.dr=t; espejo(ra.sacarIzquierdo()); espejo(ra.sacarDerecho()); } public void toespejo() { espejo(raiz); } public void pai() { frm1 frm=new frm1(); //frm.paint(frm.getGraphics()); frm.setVisible(true); frm.setExtendedState(JFrame.MAXIMIZED_BOTH); frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } class frm1 extends JFrame { int I=200; int J=200; public void paint(Graphics g) { paintT(g,raiz,I,J); } public void paintT(Graphics g,NODO ra,int I,int J) {

if(ra==null) return; g.drawString(ra.sacarinfo()+"", I, J); g.drawOval(I-8, J-20, 30, 30); if(ra.sacarDerecho()==null&&ra.sacarIzquierdo()!=null) { g.drawLine(I-5, J+5, I-35, J+35); } if(ra.sacarDerecho()!=null&&ra.sacarIzquierdo()==null) { g.drawLine(I+18, J+5, I+48, J+35); } if(ra.sacarDerecho()!=null&&ra.sacarIzquierdo()!=null) { g.drawLine(I-5, J+5, I-35, J+35); g.drawLine(I+18, J+5, I+48, J+35); } paintT(this.getGraphics(),ra.sacarIzquierdo(),I-50,J+50); paintT(this.getGraphics(),ra.sacarDerecho(),I+50,J+50); } } public void visualizarHojasco() { // String salida=""; this.visualizarHojas(raiz); } public int ContarNodos(NODO P) { if(P==null) return 0; return 1+ ContarNodos(P.sacarIzquierdo())+ ContarNodos(P.sacarDerecho()); } public static void main(String[]args) { ARBOL arbol=new ARBOL(); arbol.ingresar(20); arbol.ingresar(10); arbol.ingresar(15); arbol.ingresar(30); arbol.ingresar(5); arbol.ingresar(14); arbol.ingresar(35); arbol.ingresar(13); arbol.ingresar(37); arbol.ingresar(36); arbol.ingresar(45); arbol.ingresar(40); arbol.ingresar(100); arbol.ingresar(55);

arbol.visualizopre(); System.out.println(); //arbol.eliminar_nodo(20); JOptionPane.showMessageDialog(null,""+arbol.altura(arbol.sacarRaiz())); arbol.pai(); } public int altura(NODO raiz) { if(raiz==null) return 0; int a=altura(raiz.iz); int b=altura(raiz.dr); if(a>b) return 1+a; return 1+b; } public void visualtura() { JOptionPane.showMessageDialog(null,""+altura(raiz)); } public int sacarAltura() { return altura(raiz); } public boolean AVL(NODO p) { int resp=altura(p.sacarDerecho())-altura(p.sacarIzquierdo()); if(resp==1||resp==0||resp==-1) return true; return false; } public void visualizarAVL() { if(AVL(raiz)==true) JOptionPane.showMessageDialog(null,"si es AVL") ; else JOptionPane.showMessageDialog(null,"no es AVL"); } public void AVl() { this.AVL(raiz); } public NODO rotacion_izquierda( NODO p) { NODO aux=p.sacarIzquierdo(); p.enlaceiz(aux.sacarDerecho());

aux.enlacedr(p); return aux; } public NODO rotacion_derecha( NODO p) { NODO aux=p.sacarDerecho(); p.enlacedr(aux.sacarIzquierdo()); aux.enlaceiz(p); return aux; } public NODO rotacion_doble_izquierda(NODO p) { NODO q=p.sacarIzquierdo(); NODO aux; aux=q.sacarDerecho(); q.enlacedr(aux.sacarIzquierdo()); aux.enlaceiz(p); aux.enlacedr(q); p.enlaceiz(aux.sacarDerecho()); aux.enlacedr(p); return aux; } public NODO rotacion_doble_derecha(NODO p) { NODO q=p.sacarDerecho(); NODO aux; aux=q.sacarIzquierdo(); q.enlaceiz(aux.sacarDerecho()); aux.enlaceiz(p); aux.enlacedr(q); p.enlacedr(aux.sacarIzquierdo()); aux.enlaceiz(p); return aux; } public NODO buscaMinimo(NODO p) { if(p==null) return null; else if(p.sacarIzquierdo()==null) return p; else return buscaMinimo(p.sacarIzquierdo()); } public NODO buscaMaximo(NODO p) {

if(p==null) return null; else if(p.sacarDerecho()==null) return p; else return buscaMaximo(p.sacarDerecho()); } public void eliminando(NODO p,int e) { NODO aux,q; if(p==null) { return; } else if(e<p.sacarinfo()) { eliminando(p.sacarIzquierdo(),e); } else if(e>p.sacarinfo()) { eliminando(p.sacarDerecho(),e); } else if(p.sacarIzquierdo()==null&&p.sacarDerecho()==null) { aux=buscaMinimo(p.sacarDerecho()); e=aux.sacarinfo(); eliminando(p.sacarDerecho(),e); } } } ///////////////////////////////////////////////////////////////////////////// Package NECTAR; import java.awt.event.*; import javax.swing.*; class Ide extends JFrame { public Ide() { super("ARBOL"); final ARBOL p=new ARBOL(); JMenuBar barra; JMenu basico; JMenuItem ing,vpre,vpreH,buscar,altura,contarHojas,eliminar,avl;

eliminar=new JMenuItem("Eliminar"); altura=new JMenuItem("Altura"); contarHojas=new JMenuItem("ContarHojas"); final JTextArea area=new JTextArea(5,5); buscar=new JMenuItem("Buscar"); /*eliminar.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ p.eliminar_nodo(p.sacarRaiz(), Integer.parseInt(JOptionPane.showInputDialog("dato a eliminar"))); area.setText(p.visualizopre()); } });*/ contarHojas.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ area.setText(p.contarHojas(p.sacarRaiz())+""); } }); altura.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ area.setText(p.altura(p.sacarRaiz())+""); } }); buscar.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ p.buscar(Integer.parseInt(JOptionPane.showInputDialog("dato a buscar"))); area.setText(p.sacarSalida()); } }); ing=new JMenuItem(); ing.setText("Ingresar"); ing.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { p.ingreso(); } }); vpre=new JMenuItem(); vpre.setText("Visualizar"); vpre.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { area.setText(p.visualizopre()); } });

altura=new JMenuItem(); altura.setText("altura"); altura.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { p.visualtura(); } }); avl=new JMenuItem(); avl.setText("AVL"); avl.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { p.visualizarAVL(); } }); vpreH=new JMenuItem(); vpreH.setText("Visualizar Hojas"); vpreH.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { p.visualizarHojasco(); } }); basico=new JMenu("Basico"); barra=new JMenuBar(); barra.add(basico); basico.add(ing); basico.add(vpreH); basico.add(vpre); basico.add(buscar); basico.add(altura); basico.add(avl); basico.add(contarHojas); basico.add(eliminar); /*p.ingresar(7); p.ingresar(2); p.ingresar(3); p.ingresar(6); p.ingresar(19);

p.ingresar(34);*/ getContentPane().add(area); setJMenuBar(barra); setSize(200,100); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } ///////////////////////////////////////////////////////////////////////////// package NECTAR; import javax.swing.*; class PRINCIPAL { public static void main(String args[]) { new Ide(); } }

You might also like