¿Puedo mejorar el rendimiento del árbol negro rojo eliminando los nodos negros cero o usando el valor centinela?

A2A.

No he usado el árbol rojo negro. Intuitivamente, siento que hará muy poca diferencia.

Debe asegurarse de utilizar la estructura de datos adecuada. Además, debe realizar un perfil de rendimiento para descubrir los cuellos de botella de rendimiento. En Visual Studio, puedes hacer algo como esto:

Guía para principiantes de perfiles de rendimiento

Después de haber eliminado los cuellos de botella obvios de rendimiento, quizás pueda intentar obtener un mejor rendimiento con la misma estructura de datos.

Por ejemplo, puede crear un montón separado para los nodos del árbol. De esta manera, los nodos no estarán muy dispersos en las diferentes páginas de la memoria. Cuando atravieses los nodos, el acceso será más rápido. Recuerde que deberá escribir el código de la plataforma para esto. Puede consultar el libro “Windows a través de C / C ++” para ver cómo se puede hacer esto en Windows.

No estoy seguro de haber respondido la pregunta que me ha hecho.

Eliminar un nodo de hoja negra de un árbol RB es una de las operaciones más complicadas. No solo tiene que tratar con el padre del nodo que se va a eliminar, sino también con el nodo hermano, los hijos del hermano y quizás los nietos e incluso bisnietos.

Dado que cualquiera de los nodos descendientes hermanos anteriores puede ser nodos hoja, es necesario verificar si existen antes de decidir la acción a tomar, ¡y ya hay suficientes decisiones que tomar!

Es mucho más fácil definir un nodo nulo cuyo color es negro y sus hijos apuntan a sí mismos. No es necesario establecer los valores de entrada y padre. Entonces, cualquier nodo hoja se define para tener hijos que no son NULL pero apuntan a este nullNode. Ya no es necesario verificar si existe un nodo hijo.