Per il fix di inserimento dell'albero rosso-nero il libro distingue tra 6 casi, di cui 3 simmetrici. I casi sono (z è il nodo che viene inserito):
- Caso 1: z's z è rosso
- Caso 2: z's z è nero e z è un figlio destro
- Caso 3: z's z è nero e z è un figlio sinistro
Il caso 2 è un sottoinsieme del caso 3, poiché possiamo trasformare Case 2 in 3 con una rotazione sinistra.
Tuttavia nello pseudocodice del libro che puoi vedere qui o qui scrivono come segue:
if uncle.color == red:
# Handle case
else if z == z.p.right:
# Handle case 2
# Handle case 3
Non dovrebbe essere questo:
if uncle.color == red:
# Handle case
else:
if z == z.p.right:
# Handle case 2
# Handle case 3
Mi manca qualcosa? Il libro usa else if
in un modo diverso rispetto a quello che dice Python? L'implementazione C ++ ha fornito qui utilizza la seconda versione come mi aspettavo.