Anda di halaman 1dari 30

LAURA CATALINA PINILLA PEZ COD: 55211507 INGERIERIA DE SISTEMAS

rbol
Un rbol es una estructura de datos jerarquizada, Cada dato reside en un nodo, y existen relaciones de parentesco entre nodos: padre, hijo, hermano, ascendiente, descendiente, etc.

ARBOLES BINARIOS
Se

define un rbol binario como un conjunto finito de elementos (nodos) que bien esta vaco o esta formado por una raz con dos arboles binarios disjuntos, es decir, dos descendientes directos llamados subrbol izquierdo y subrbol derecho.

El TAD rbol binario


Como un tipo de dato abstracto, un rbol binario es una especializacin de un rbol que soporta cuatro mtodos accesores adicionales:
left(v):Regresa el hijo izquierdo de v; una condicin de error ocurre si v no tiene hijo izquierdo

right(v):Regresa el hijo derecho de v; una condicin de error ocurre si v no tiene hijo derecho.
hasLeft(v):Prueba si v tiene hijo izquierdo.

hasRight(v):Prueba si v tiene hijo derecho.


No se definen mtodos de actualizacin especializados sino que se consideran algunas posibles actualizaciones de mtodos cuando se describan implementaciones especificas y aplicaciones de arboles binarios.

Una interfaz rbol binario en Java

Propiedades del rbol binario


Las propiedades de los

arboles binarios se relacionan con sus alturas y el nmero de nodos Se denota al conjunto de todos los nodos de un rbol T que estn a la misma profundidad d como el nivel d de T

Implementacin Java de un nodo del rbol binario


Se emplea la interfaz Java PosicionAB para representar un nodo del rbol binario. Esta interfaz extiende Posicin, por lo que se hereda el mtodo elemento, y tiene mtodos adicionales para poner el elemento en el nodo, setElemento y para poner y devolver el padre, el hijo izquierdo y el hijo derecho.

CREACIN DE ARBOLES BINARIOS


class NodoArbol{ int Dato;

NodoArbol izq; NodoArbol der; public NodoArbol (int dato){ this.dato=dato; izq=der=null; } }

Class Arbol { private NodoArbol raz; public void find (int key){} public void insert (int dato){} public void delete (ind dato){} } //Fin clase Arbol

RECORRIDO DE UN ARBOL BINARIO


En los rboles binarios, el recorrido de sus distintos nodos se debe realizar en tres pasos: acceder a la informacin de un nodo dado, acceder a la informacin del subrbol izquierdo de dicho nodo, acceder a la informacin del subrbol derecho de dicho nodo.

Imponiendo la restriccin de que el

subrbol izquierdo se recorre siempre antes que el derecho, esta forma de proceder da lugar a tres tipos de recorrido, que se diferencian por el orden en el que se realizan estos tres pasos.

Preorden : primero

se accede a la informacin del nodo, despus al subrbol izquierdo y despus al derecho.

Inorden : primero se

accede a la informacin del subrbol izquierdo, despus se accede a la informacin del nodo y, por ltimo, se accede a la informacin del subrbol derecho.

Postorden : primero

se accede a la informacin del subrbol izquierdo, despus a la del subrbol derecho y, por ltimo, se accede a la informacin del nodo.

RBOL BINARIO DE BSQUEDA


Es de bsqueda porque: Los nodos estn ordenados de manera conveniente para la bsqueda. Todas las datos del subrbol izquierdo son menores que el dato del nodo raz, y todas los datos del subrbol derecho son mayores.

Bsqueda La operacin de bsqueda en un rbol

binario de bsqueda es bastante sencilla de entender. Suponer que se busca un elemento x en el rbol. Lo primero que haremos ser comprobar si se encuentra en el nodo raz.
Para continuar la bsqueda en el subrbol adecuado se

aplica el mismo razonamiento. Por lo tanto, el esquema del algoritmo BuscarNodo ser el siguiente:

public Nodo find (int llave){


Nodo actual = raz; while (actual.id != llave) { if (llave menor actual.dato) actual = actual.izq; else actual = actual.der; if (actual == null) return null; } //fin while return actual; }

Insercin en un ABB
La insercin es una operacin que se puede realizar

eficientemente en un rbol binario de bsqueda. La estructura crece conforme se inserten elementos al rbol. Los pasos que deben realizarse para insertar un elemento a un ABB son los siguientes:
Debe compararse el valor o dato a insertar con la raz del

rbol. Si es mayor, debe avanzarse hacia el subrbol derecho. Si es menor, debe avanzarse hacia el subrbol izquierdo.

19

Insercin en un ABB
Repetir sucesivamente el paso 1 hasta que se cumpla

alguna de las siguientes condiciones


El subrbol derecho es igual a vaci, o el subrbol

izquierdo es igual a vaci; en cuyo caso se proceder a insertar el elemento en el lugar que le corresponde. El valor o dato que quiere insertarse es igual a la raz del rbol; en cuyo caso no se realiza la insercin.

20

Insercin en un ABB
Supngase que quieren insertarse las siguientes los

siguientes datos en un rbol binario de bsqueda que se encuentra vaci. 120 87 43 65 140 99 130 22 56

21

Insercin en un ABB .Solucin


120 87 43 65 140 99 130 22 56
120

87

140

43

65

130

22

56

I 99

22

Eliminar un nodo
Para eliminar un nodo existen los siguientes casos:
Si el elemento a borrar es Terminal (hoja), 2. Si el elemento a borrar tiene un solo hijo, 3. Si el elemento a borrar tiene los dos hijo,
1.

23

Eliminar un nodo

Caso 1 Si el elemento a borrar es terminal (hoja), simplemente se elimina. aux = aux.izq = null
Ejemplo eliminar nodo 7

6 1 7 8 9 1

6
8 1 9

6
8 9
24

Eliminar un nodo

Caso 2 Si el elemento a borrar tiene un solo hijo, entonces tiene que sustituirlo por el hijo

Ejemplo: eliminar nodo 8

7
1 8 9 1

7 8 9 1

7 9

25

Eliminar un nodo
Caso 3

Si el elemento a borrar tiene los dos hijos, entonces se tienen que sustituir por el nodo que se encuentra mas a la izquierda en el subrbol derecho, o por el nodo que se encuentra mas a la derecha en el subrbol izquierdo.
Ejemplo: eliminar el 6

6 1 7 8 1

7
8 7 1

7 8 9
26

//cuenta los nodos que hay en el rbol public static int nodo (nodo raiz){ if (raiz == null) return 0; else return (1+ Nodo( raiz.der) + Nodo( raiz.izq)) }
27

Contar nodos

//suma los nodos que hay en el rbol public static int sumaNodo( nodo raiz){ if(raiz == null) return 0; else Return (sumaNodo (raiz.der) + sumaNodo (raiz.izq) ) }

Sumar los nodos

28

Calcular profundidad del rbol // calcula la profundidad de un rbol


public int profundidad (Nodo raiz) { if (raiz == null) return 0; If (profundidad (raiz.der) > profundidad (raiz.izq)) return profundidad (raiz.der) + 1; else return profundidad( raiz.izq) + 1 }

29

Contar hojas. // Cuenta hojas de un rbol


public int contarHojas (Nodo raiz) { if (raiz = = null) return 0; If ((raiz.der == null) && (raiz.izq == null)) Return 1; else return contarHojas (raiz.izq) + contarHojas (raiz.der) }

30

Anda mungkin juga menyukai