Diferencia entre revisiones de «Árbol AA»
Contenido eliminado Contenido añadido
Traducción del pseudocódigo. |
|||
Línea 64:
La inserción comienza con la búsqueda normal en un árbol binario y su procedimiento de inserción. Después, a medida que se desenrolla la pila de llamadas, es fácil comprobar la validez del árbol y realizar las rotaciones que se precisen. Si aparece un enlace horizontal izquierdo, se realiza una torsión, y si aparecen dos enlaces horizontales derechos, se realiza una división, posiblemente incrementando el nivel del nuevo nodo raíz del subárbol correspondiente. Observe que el código de muestra realiza un incremento de nivel(T). Lo que hace necesario continuar comprobando la validez del árbol a medida que las modificaciones suben desde las hojas.
'''function''' insert '''is'''▼
'''entrada:''' X, el valor a ser insertado, y T, la raíz del árbol en el cual se insertará.
'''salida:''' Una versión balanceada de T que incluye a X.
'''if''' nil(T) '''then'''▼
''Create a new leaf node with X.''▼
'''return''' node(X, 1, Nil, Nil)▼
'''else if''' X < value(T) '''then'''▼
left(T) := insert(X, left(T))▼
right(T) := insert(X, right(T))▼
'''end if'''▼
''Haz el procedimiento normal de inserción de un árbol de búsqueda binario.
Asigna al hijo correcto el resultado de la llamada recursiva en caso de que
un nodo nuevo fue creado o la raíz del subárbol cambió.''
T := split(T)▼
''Note que el caso X == valor(T) no está especificado. En esta implementación,
no tendrá ningún ejemplo. Se puede cambiar el comportamiento dependiendo de
la implementación.''
''Haz la torsión y luego la división. Las condiciones de si serán hechas ambas
'''return T'''▼
acciones están dentro de los procedimientos ya descritos arriba.''
T := división(T)
'''fin de la función'''
== Borrado ==
|