Está en la página 1de 5

INGENIERIA DE SISTEMAS

19

ESTRUCTURAS DE DATOS (Listas simples)

ARBOLES
Un rbol es una estructura no lineal en la que cada nodo puede apuntar a uno o varios nodos. Tambin se suele dar una definicin recursiva: un rbol es una estructura compuesta por un dato y varios rboles. Estas definiciones son simples, pero, las caractersticas que implican no lo son tanto. Componentes de un rbol A D

Una caracterstica importante de los rboles es que cada nodo slo puede ser apuntado por otro nodo, es decir, cada nodo slo tendr un padre. Nodo hijo: cualquiera de los nodos apuntados por uno de los nodos del rbol. En el ejemplo, L y M son hijos de G. Nodo padre: Nodo del que salen otros nodos. En el ejemplo B es padre de E y F Nodo raz: nodo que no tiene padre, Nodo hoja: nodo que no tiene hijos. Del ejemplo, K,F,L,M,H,I,N,O son nodos hoja. Cada nodo en un rbol est ubicado en un nivel determinado, empezando por la raz que se encuentra en el nivel cero (0), sus hijos en el nivel 1, 2, y as sucesivamente, hasta la profundidad o altura que corresponde al mximo nivel del rbol. Orden: es el nmero mximo de hijos que puede tener cada elemento del rbol. De este modo, diremos que un rbol en el que cada nodo puede apuntar a otros dos es de orden dos, si puede apuntar a tres ser de orden tres, etc. Los arboles de orden dos son bastante especiales, de hecho les dedicaremos varios captulos. Estos rboles se conocen tambin como rboles binarios ARBOLES BINARIOS Es un rbol especial donde cada nodo padre como mximo tiene dos hijos, denominados como hijo izquierdo y derecho.

INGENIERIA DE SISTEMAS ARBOLES BINARIOS DE BSQUEDA (ABB)

20

ESTRUCTURAS DE DATOS (Listas simples)

Se trata de arboles en los que se cumple que para cada nodo, el valor del nodo izquierdo de cada raz es menor que el valor del nodo raz y que el valor del nodo derecho de la raz. 6 4 raiz

12

10

18 23

3 20 Insercin de datos en un Arbol Binario de Bsqueda

Cuando se insertan los datos, el primer dato siempre ser la raz. Los siguientes datos buscarn su posicin, siguiendo la lgica de que los datos menores son a la izquierda y los datos mayores a la derecha. Por ejemplo: si la secuencia de insercin de datos sera la siguiente: 20 , 6 , 24 , 5 , 9 , 22 , 26 , 29 , 7 , 10 , 3 , 25 El rbol generado es 20 6 24

22

26

10

25

29

INGENIERIA DE SISTEMAS Recorridos de un rbol Existen tres tipos de recorridos -

21

ESTRUCTURAS DE DATOS (Listas simples)

Recorrido en pre-orden (RID Raz, izquierda, derecha) Recorrido en orden (IRD Izquierda, raz, derecha) Recorrido en post-orden (IDR izquierda, derecha, raz)

Por ejemplo los recorridos del anterior rbol de ejemplo anterior seran como sigue: En pre-orden: 20 , 6 , 5 , 3 , 9 , 7 , 10 , 24 , 22 , 26 , 25 , 29 En orden: 3 , 5 , 6 , 7 , 9 , 10 , 20 , 22 , 24 , 25 , 26 , 29 En post-orden: 3 , 5 , 7 , 10 , 9 , 6 , 22 , 25 , 29 , 26 , 24 , 20 IMPLEMENTACIN DE ARBOLES BINARIOS DE BUSQUEDA EN JAVA
NODO

info izda null

dcha null

class Nodo { int info; Nodo izda; Nodo dcha; public Nodo(int a){ info=a; izda=dcha=null; } } class Arbol { Nodo raiz; void insertar(int a){ Nodo aux=new Nodo(a); if(raiz==null) raiz=aux; else { Nodo p,q; p=q=raiz; while(p!=null) { q=p; if(a<p.info) p=p.izda; else p=p.dcha; } if(a<q.info) q.izda=aux; else q.dcha=aux; } }

ARBOL

raiz

5 5
null null null

5
null

INGENIERIA DE SISTEMAS

22

ESTRUCTURAS DE DATOS (Listas simples)


void inOrden(Nodo r){ if(r!=null){ inOrden(r.izda); System.out.print(r.info+" "); inOrden(r.dcha); } }

EJEMPLO class prueba { public static void main(String[] args) { Arbol a=new Arbol(); a.insertar(2); a.insertar(1); a.insertar(3); a.inOrden(a.raiz); } } Funcin que devuelve la cantidad de Nodos en un rbol int cantidad(Nodo r) { if(r==null) return 0; else return 1+cantidad(r.izda)+cantidad(r.dcha); } Funcin que devuelve la Profundidad (altura) de un rbol La profundidad de un rbol es el nivel ms largo que tiene el rbol int profundidad(Nodo r) { if(r!=null) { int i=1,d=1; if(r.izda==null&&r.dcha==null) return 1; if(r.izda!=null) i=i+profundidad(r.izda); if(r.dcha!=null) d=d+profundidad(r.dcha); if(i>d) return i; else return d; } else return 0; }

INGENIERIA DE SISTEMAS

23

ESTRUCTURAS DE DATOS (Listas simples)

Funcin que busca un nodo en el rbol boolean buscar(Nodo r,int a) { if(r==null) return false; else { if(a<r.info) return buscar(r.izda,a); if(a>r.info) return buscar(r.dcha,a); return true; } }

También podría gustarte