Title: Tema 4
1- Tema 4 Árboles.
- Árbol sobre matriz.
2Á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 lt 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.
0 1 2 3 4 5 6 7 8 9
Clave 10 20 5 15 45 0 0 0 0 0
Hijo izquierdo 3 6 -1 -1 5 -1 -1 -1 -1 -1
Hijo derecho 2 4 -1 -1 -1 -1 -1 -1 -1 -1
4Á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) publi
c void ordenCentral () ordenCentralAux (0)
private void postOrdenAux (int i) if (i !
NULL) postOrdenAux (matriz i.izq) postOrd
enAux (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 gt dato)
- resul busqueda (matriz i.izq, dato)
- else if (matriz i.clave lt 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 lt 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 gt dato)
- j insertarAux (matriz i.izq, dato)
- if (j ! NULL)
- matriz i.izq j
- j i
-
- else if (matriz i.clave lt 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
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Á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 gt dato)
- j eliminar (matriz i.izq, dato)
- if (j ! NULL)
- matriz i.izq j
- j i
-
- else if (matriz i.clave lt dato)
- jeliminar(matrizi.der, dato)
- if (j ! NULL)
- matriz i.der j
- j i
-
- else
- numNodos--
- else if (matriz i.izq NULL)
- j matriz i.der
- borrarNodo (i)
-
- else
- matrizi.izqeliminar2Hijos
(matrizi.izq,i) - j i
-
-
- else System.out.println ("la clave no existe")
- return j
-
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 lt numNodos j)
- matriz j.clave matriz j1.clave
- matriz j.der matriz j1.der
- matriz j.izq matriz j1.izq
-
- for (int j 0 j lt numNodos j)
- if (matriz j.der gt i)
- matriz j.der matriz j.der -1
- if (matriz j.izq gt i)
- matriz j.izq matriz j.izq -1
-
-