Tema 4 Árboles. Árbol sobre matriz.

Slides:



Advertisements
Presentaciones similares
5. Estructuras no lineales estáticas y dinámicas
Advertisements

GRAFOS ESTRUCTURAS DE DATOS.
ÁRBOLES EN C UNIVERSIDAD “ALONSO DE OJEDA” Facultad de Ingeniería
Programación II Listas
Estructuras de datos y algoritmos
Type tipo_bf = ; tipo_dato = word; tipo_puntero = ^tipo_nodo; tipo_nodo = record dato: tipo_dato; izquierdo, derecho: tipo_puntero; bf: tipo_bf;
Utilización de un TAD Arbol.
1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
Programación y Estructuras de Datos
Operaciones sobre un árbol
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Tema 5 Grafos..
Tema 5 Grafos. Implementación (I)..
Árboles binarios. Algoritmos básicos
Tema 1. Introducción a la programación (Lenguaje java).
Tratamiento de listas en Java
2.3 Cola de números enteros.
2.2 Pila de números enteros
Tema 5 Grafos. Recorridos..
Tema 4 Árboles. Conceptos Generales..
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Marzo 2007 Lenguajes Visuales Clase III.
Cont. Arbol Binario de Búsqueda
Programación II Colas Igor Santos Grueiro.
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de.
ÁRBOLES DE EXPRESION.
Método en Java.
Recursión Se dice que un método es recursivo si forma parte de sí mismo o se define en función de sí mismo. La recursión es un medio particularmente poderoso.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Introducción a la Programación Orientada a Objetos Redefinición y Sobrecarga Dada la siguiente jerarquía de clases: Alfa Delta Beta.
0. Desarrollo de Programas: técnica del refinamiento.
Definición Estructura de datos jerárquica (no lineal) que puede representarse como un conjunto de nodos enlazados entre sí por medio de ramas. Formalmente,
Slide 7-1 Copyright © 2003 Pearson Education, Inc. Figure: Estructuras de datos.
Arboles (Trees) Arboles Arboles binarios Recorridos de árboles
Diplomado en Informática Aplicada
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Colecciones.
USA agenda e itemAgenda
Programación orientada a objetos
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
ÁRBOLES BINARIOS DE BÚSQUEDA
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
ARBOLES ESTRUCTURAS DE DATOS.
3.  Recursividad.
Estructura de Datos y Algoritmos
Árboles binarios de búsqueda
Arboles M.C. José Andrés Vázquez FCC/BUAP
Capítulo 5 - b: Hilos. 4.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th edition, Jan 23, 2005 Ejemplo de hilos: un applet Un.
ARBOLES ESTRUCTURAS DE DATOS.
Pilas y Colas Estructuras de Datos.

Árboles Binarios Estructuras de Datos.
LISTA DOBLEMENTE ENLAZADA
Árboles de Búsqueda Binaria
TABLAS DE DISPERSIÓN (HASH). TABLAS ENCADENADAS INDIRECTAS.
Arboles binarios de búsqueda. Elemento estándar: Cuenta class Cuenta { public: int codigo; char nombreCliente[50]; float saldo; public: Cuenta(); Cuenta(int.
Grafos..
Algoritmos y Estructuras de datos Listas Doblemente enlazadas
Árboles Binarios * Recorridos * Tipo
Listas. Utilización de un TAD Lista. Interfaz del TAD LISTA public interface Lista { void crearNodo (); /*Crea un nuevo nodo en el TadLista*/ int devolverClave.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
Ing. Esp. Ricardo Cujar. Permite la ejecución de una sentencia, dada una determinada condición. If(condición){ sentencia(s) a ejecutar en caso de que.
Listas Dinámicas.
1 ListaUna Lista se define como una serie de N elementos E 1, E 2,..., E N, ordenados de manera consecutiva, es decir, el elemento E k (que se denomina.
Árboles binarios. Algoritmos básicos
Tema 3 Árboles. Conceptos Generales. Curso 2014/2015 ETSISI UPM.
Árboles Binarios Estructuras de Datos.
Árboles Binarios Estructuras de Datos. Las estructuras dinámicas son las en la ejecución varia el número de elementos y uso de memoria a lo largo del.
Transcripción de la presentación:

Tema 4 Árboles. Árbol sobre matriz.

Árbol sobre Matriz: clases. Clase NodoArbol Clase árbol 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; }

Árbol sobre Matriz: representación. 1 2 3 4 5 6 7 8 9 Clave 10 20 15 45 Hijo izquierdo -1 Hijo derecho

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

Á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;

Árbol sobre Matriz: inserción (I) 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

Á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); matriz [i].der = j; else System.out.println ("la clave ya existe"); else { j = numNodos; matriz [j].clave = dato; numNodos++; return j;

Á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;

Árbol sobre Matriz: eliminación (II) 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); matriz [i].der = j; 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) 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;