Tema 4 Árboles. Árbol sobre matriz

  • Upload
    gracie

  • View
    55

  • Download
    5

Embed Size (px)

DESCRIPTION

Tema 4 Árboles. Árbol sobre matriz. Clase NodoArbol. Clase árbol. Árbol sobre Matriz: clases. public class ArbolMatriz { final int NULL = -1, N = 10; NodoArbol [ ] matriz; int numNodos; ArbolMatriz () { matriz = new NodoArbol [N]; for (int i = 0; i < N; i++) - PowerPoint PPT Presentation

Citation preview

  • Tema 4 rboles.rbol sobre matriz.

  • rbol sobre Matriz: clases.Clase NodoArbol

    Clase rbol

    class NodoArbol {int clave, izq, der;NodoArbol () {clave = 0;izq = -1;der = -1;}}public class ArbolMatriz {final int NULL = -1, N = 10;NodoArbol [ ] matriz;int numNodos;ArbolMatriz () {matriz = new NodoArbol [N];for (int i = 0; i < N; i++)matriz [i] = new NodoArbol ();numNodos = 0;}

  • rbol sobre Matriz: representacin.

  • rbol sobre Matriz: recorridos en profundidad.PreordenOrden centralprivate void preOrden (int i) {if (i != NULL) {System.out.print (matriz [i].clave+", ");preOrden (matriz [i].izq);preOrden (matriz [i].0der);}}public void preOrden () {preOrdenAux (0);} private void ordenCentralAux (int i) {if (i != NULL) {ordenCentralAux (matriz [i].izq);System.out.print (matriz [i].clave+", ");ordenCentralAux (matriz [i].der);}}public void ordenCentral () {ordenCentralAux (0);}Postordenprivate void postOrdenAux (int i) {if (i != NULL) {postOrdenAux (matriz [i].izq);postOrdenAux (matriz [i].der);System.out.print (matriz [i].clave+", ");}}public void postOrden () {postOrdenAux (0);}

  • rbol sobre Matriz: bsqueda.Bsqueda de un elemento:public boolean busqueda (int dato) {return busqueda (0, dato);}private boolean busqueda (int i, int dato) {boolean resul = false;if (i != NULL) if (matriz [i].clave > dato) resul = busqueda (matriz [i].izq, dato);else if (matriz [i].clave < dato) resul = busqueda (matriz [i].der, dato); else resul = true;return resul;}

  • rbol sobre Matriz: insercin (I)Insercin:Comprobamos si no hay espacio (numNodos = N)O si el rbol est vaco (numNodos = 0)public void insertar (int dato) {if (numNodos == 0){matriz [0].clave =dato;numNodos++;}else if (numNodos < N)insertarAux (0, dato);else System.out.println ("rbol lleno");}Si ya hay algn nodo: llamamos a un mtodo auxiliar

  • rbol sobre Matriz: insercin (II)Mtodo auxiliar:private int insertarAux (int i, int dato) {int j = NULL;if (i != NULL) if (matriz [i].clave > dato) {j = insertarAux (matriz [i].izq, dato);if (j != NULL)matriz [i].izq = j;j = i;}else if (matriz [i].clave < dato) { j = insertarAux (matriz [i].der, dato); if (j != NULL)matriz [i].der = j; j = i; } else System.out.println ("la clave ya existe");else {j = numNodos;matriz [j].clave = dato;numNodos++;}return j;}

  • rbol sobre Matriz: eliminacin (I)Se utiliza la misma estrategia que se ha visto ya (eliminar + eliminar2Hijos)Mtodo de llamada:public void eliminar (int dato) {eliminar (0, dato);} Mtodo eliminar2Hijos:

    private int eliminar2Hijos (int i, int j) {int resul = i;if (matriz [i].der != NULL) matriz [i].der = eliminar2Hijos (matriz [i].der, j);else {matriz [j].clave = matriz [i].clave;borrarNodo (i);resul = matriz [i].izq;}return resul;}

  • rbol sobre Matriz: eliminacin (II)Mtodo eliminar:

    private int eliminar (int i, int dato) {int j = NULL;if (i != NULL) if (matriz [i].clave > dato) {j = eliminar (matriz [i].izq, dato);if (j != NULL)matriz [i].izq = j;j = i;}else if (matriz [i].clave < dato) {j=eliminar(matriz[i].der, dato);if (j != NULL)matriz [i].der = j;j = i; } else { numNodos--; if (matriz [i].der == NULL) { j = matriz [i].izq; borrarNodo (i); }

    else if (matriz [i].izq == NULL) {j = matriz [i].der;borrarNodo (i); } else { matriz[i].izq=eliminar2Hijos (matriz[i].izq,i);j = i;} }else System.out.println ("la clave no existe");return j;}

  • rbol sobre Matriz: eliminacin (II)Adems se utiliza el mtodo auxiliar borrarNodo:

    private void borrarNodo (int i) {for (int j = i; j < numNodos; j++) {matriz [j].clave = matriz [j+1].clave;matriz [j].der = matriz [j+1].der;matriz [j].izq = matriz [j+1].izq;}for (int j = 0; j = i)matriz [j].der = matriz [j].der -1;if (matriz [j].izq >= i)matriz [j].izq = matriz [j].izq -1;}}