Hay 3 casos que deben considerarse al eliminar un nodo del Árbol de búsqueda binaria.
1. El nodo a eliminar no tiene elementos secundarios que no sean elementos secundarios izquierdo ni secundario derecho presente.
Caso 1 en la imagen de abajo.
2. El nodo a eliminar solo tiene un hijo, ya sea izquierdo o derecho. Caso 2 en la imagen de abajo.
3. El nodo a eliminar tiene ambos elementos secundarios, izquierdo y derecho. Caso 3 en la imagen de abajo.
- ¿Cuáles son las preguntas de la entrevista formuladas en el software Hypermesh?
- ¿Cuándo es el momento adecuado para que un graduado universitario (CSE) comience a leer el libro 'Cracking the Coding Interview'?
- Hay algunos problemas en Cracking the Coding Interview (sexta edición) que tienen una solución de más de 1 o 2 páginas. ¿Cuál es la posibilidad de que se pregunte durante una entrevista de pizarra?
- Cómo prepararse para la entrevista como ingeniero senior en Google / Facebook / Apple / LinkedIn / Yahoo
- ¿Cuáles son las mejores preguntas que hacen los entrevistadores en la entrevista relacionada con C, si va a realizar una entrevista de la compañía 5-6 CTC?
Caso 1:
Para el caso 1, es muy sencillo,
1. Busque el nodo que debe eliminarse.
2. El nodo a eliminar está en el lado izquierdo o en el lado derecho de su nodo padre.
3. Si el nodo que se va a eliminar está en el lado izquierdo de su nodo padre, marque el lado izquierdo del nodo padre como nulo.
Por ejemplo: parent.setLeft (nulo);
4. Si el nodo que se va a eliminar está en el lado derecho de su nodo padre, marque el lado derecho del nodo padre
a nulo. Por ejemplo: parent.setRight (nulo);
Caso 2:
Para el caso 2, es muy sencillo,
1. Busque el nodo que debe eliminarse.
2. El nodo a eliminar está en el lado izquierdo o en el lado derecho de su nodo padre.
3. El nodo a eliminar solo tiene un elemento secundario presente que puede estar en el lado izquierdo o derecho.
4. Si el nodo a eliminar ha dejado un niño presente,
luego conecte directamente su nodo primario al nodo secundario izquierdo del nodo que se va a eliminar.
Por ejemplo: parent.setLeft (child.getLeft ());
5. Si el nodo que se va a eliminar tiene un hijo secundario presente,
luego conecte directamente su nodo primario al nodo secundario derecho del nodo que se va a eliminar.
Por ejemplo: parent.setRight (child.getRight ());
6. De esta forma, el nodo que se eliminará se eliminará del árbol y el nodo principal
se conectará directamente al nodo secundario del nodo que se eliminará.
Caso 3:
Para el caso 3, es un poco complicado
1. Busque el nodo que debe eliminarse.
2. Ahora, en lugar de eliminar el nodo, reemplazaremos los datos del nodo que se eliminará
con los datos que mejor se ajusten a ese lugar.
3. ¿Qué datos se ajustarán mejor? Busque los datos del subárbol del nodo que se va a eliminar y
encontrar el nodo cuyos datos cuando se colocan en el lugar del nodo que se eliminará
mantener la propiedad del árbol de búsqueda binaria (la clave en cada nodo debe ser mayor
que todas las claves almacenadas en el subárbol izquierdo, y más pequeñas que todas las claves en el subárbol derecho) intactas.
4. Encuentre el elemento mínimo del subárbol derecho del nodo que se va a eliminar o
encuentre el elemento máximo del subárbol izquierdo del nodo que se va a eliminar y
copie los datos de ese nodo a los datos del nodo que se va a eliminar.
5. Elimine el nodo que encontramos el mejor ajuste en el paso 5.
Explicación detallada con el Programa completo: Eliminar un nodo en el Árbol de búsqueda binaria.