1 / 10

Tema 4 Árboles. Árbol sobre matriz.

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++)

gracie
Download Presentation

Tema 4 Árboles. Árbol sobre matriz.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tema 4 Árboles. Árbol sobre matriz.

  2. 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++) matriz [i] = new NodoArbol (); numNodos = 0; } class NodoArbol { int clave, izq, der; NodoArbol () { clave = 0; izq = -1; der = -1; } }

  3. Árbol sobre Matriz: representación.

  4. Preorden Orden central Árbol sobre Matriz: recorridos en profundidad. private 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); } • Postorden private 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); }

  5. Árbol sobre Matriz: búsqueda. • Búsqueda 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; }

  6. Árbol sobre Matriz: inserción (I) • Inserción: • Comprobamos si no hay espacio (numNodos = N) • O si el árbol está vacío (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 algún nodo: llamamos a un método auxiliar

  7. Árbol sobre Matriz: inserción (II) • Método 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; }

  8. Árbol sobre Matriz: eliminación (I) • Se utiliza la misma estrategia que se ha visto ya (eliminar + eliminar2Hijos) • Método de llamada: public void eliminar (int dato) { eliminar (0, dato); } • Método 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; }

  9. Método 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: eliminación (II)

  10. Árbol sobre Matriz: eliminación (II) • Además se utiliza el método 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 <= numNodos; j++) { if (matriz [j].der >= i) matriz [j].der = matriz [j].der -1; if (matriz [j].izq >= i) matriz [j].izq = matriz [j].izq -1; } }

More Related