Eliminación (en general) no es conmutativa. Aquí es un contraejemplo:
4
/ \
3 7
/
6
¿Qué pasa si borramos 4 y 3?
Cuando borramos 4, obtenemos 6 como la nueva raíz:
6
/ \
3 7
Eliminación 3 no cambia el árbol, pero esto nos da:
6
\
7
¿Qué pasa si borramos 3 y 4?
Cuando borramos el árbol 3 no cambia:
4
\
7
/
6
Sin embargo, cuando ahora Borrar 4, la nueva raíz se convierte en 7:
7
/
6
Los dos árboles resultantes no son los mismos, por lo tanto, su eliminación no es conmutativa.
ACTUALIZAR
No he leído la restricción de que esto es cuando siempre se elimina un nodo con 2 niños. Mi solución es para el caso general. Voy a actualizar si / cuando puedo encontrar un contraejemplo.
Otra actualización
No tengo pruebas concretas, pero voy a aventurar una respuesta:
En el caso general, a manejar las supresiones de manera diferente en función de si usted tiene dos hijos, un niño, o no tiene hijos. En el contraejemplo I, siempre, en primer lugar eliminar un nodo con dos niños y luego un nodo con un niño. Después de eso, puedo borrar un nodo sin hijos y luego otro nodo con un niño.
En el caso especial de solamente borrar nodos con dos hijos, usted desea considerar el caso en que ambos nodos están en la misma sub-árbol (ya que no importa si están en diferentes sub-árboles, se puede estar seguro de que la estructura general no va a cambiar en base a la orden de supresión). Lo que realmente necesita para probar es si el orden de eliminación de nodos en la misma sub-árbol, donde cada nodo tiene dos hijos, asuntos.
Considere dos nodos A y B, donde A es un antepasado de B. A continuación, puede refinar aún más la cuestión es:
Es la eliminación conmutativa cuando usted está considerando la eliminación de dos nodos de un árbol binario de búsqueda que tienen una relación ancestro-descendiente entre sí (esto implicaría que están en la misma sub-árbol)?
Cuando se elimina un nodo (digamos A), que atraviesan la sub-árbol de la derecha para encontrar el elemento mínimo. Este nodo será un nodo hoja y nunca puede ser igual a B (porque B tiene dos hijos y no puede ser un nodo hoja). A continuación, reemplazar el valor de A con el valor de este nodo hoja. Lo que esto significa es que el único cambio estructural para el árbol es el reemplazo del valor de A con el valor de la hoja-nodo, y la pérdida de la hoja-nodo.
El mismo proceso está implicado por B. Es decir, se sustituye el valor del nodo y reemplazar un nodo hoja. Así que, en general, cuando se elimina un nodo con dos hijos, el único cambio estructural es el cambio en el valor del nodo que va a eliminar, y la supresión del nodo hoja, que es el valor que está utilizando como reemplazo .
Así que la pregunta es más refinada:
Pueden garantizar que siempre obtendrá el mismo nodo de sustitución sin tener en cuenta el orden de eliminación (cuando siempre se está eliminando un nodo con dos hijos)?
La respuesta (creo) es sí. ¿Por qué? Aquí hay algunas observaciones:
- Digamos que se elimina el nodo descendiente primero y el segundo nodo antecesor. El sub-árbol que se modificó cuando se ha eliminado el nodo descendiente es no en el sub-árbol izquierdo del hijo derecho del nodo antecesor. Esto significa que este sub-árbol no se ve afectado. Lo que esto significa también es, independientemente del orden de deleción, dos diferentes se modifican sub-árboles y por lo tanto la operación es conmutativa.
- Una vez más, digamos que se elimina el nodo descendiente primero y el segundo nodo antecesor. El sub-árbol que se modificó cuando se ha eliminado el nodo descendiente está en el sub-árbol izquierdo del hijo derecho del nodo antecesor. Pero incluso en este caso, no hay solapamiento. La razón es cuando se elimina el nodo descendiente en primer lugar, nos fijamos en el sub-árbol izquierdo del nodo descendiente derecho del niño. Cuando a continuación, eliminar el nodo antecesor, se le no ir por ese sub-árbol ya que tendrá siempre se va hacia la izquierda después de introducir izquierda sub-árbol del nodo antepasado de la derecha en el niño. Así que de nuevo, independientemente de lo que se elimina primero está modificando diferentes sub-árboles y por lo que parece el fin, no importa.
- Otro caso es si se elimina el nodo ancestro primero y encuentra que el nodo mínimo es un hijo del nodo descendiente. Esto significa que el nodo descendiente va a terminar con un niño, y la supresión de la de un niño es trivial. Consideremos ahora el caso en que en este escenario, que ha eliminado el nodo descendiente en primer lugar. De allí tendría que sustituir el valor del nodo descendiente con su hijo derecho y luego eliminar el hijo derecho. A continuación, cuando se elimina el nodo antepasado, se termina encontrando el mismo nodo mínimo (hijo izquierdo del nodo eliminado de edad, que también es hijo izquierdo del nodo sustituido). De cualquier manera, se termina con la misma estructura.
Esto no es una prueba rigurosa; estas son sólo algunas observaciones que he hecho. Por todos los medios, no dude en hacer agujeros!