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.
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.
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
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
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
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.
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:
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
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
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
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) ) }
28
29
30