Puedo estar equivocado, pero el código en el sitio referenciado parece bien. Yo no lo he probado, sin embargo.
Esto es cierto, ya que la función de eliminación toma un argumento que es de tipo BSTNode ** nodo. Este no es un puntero al nodo. Este es un puntero a puntero del nodo del padre para el propio nodo . Esto podría ser un poco descuidado, pero tengo que admitir que después de darse cuenta de lo que hace el código, es una elegante solución en su camino. Así que al reescribir (* nodo), que no está reescribiendo el nodo en sí , en lugar que está reescribiendo del padre del nodo puntero al nodo . Efectivamente el código está haciendo lo que usted sugiere de una manera ligeramente pervertida: D. Espero que entendió lo que quería decir y espero que lo hizo bien.
También recomendaría que lea más acerca de los árboles rojo-negro, ya que este artículo da una idea única para crear el árbol, pero la estructura descrita no tiene límites asintóticos para su altura. Si, por ejemplo, se presiona valores ordenados en esta estructura, será una lista conectada en lugar de un árbol de equilibrado.