la ricorsione funziona così: prima chiami la funzione su tutti i padri, poi appena arrivi a una foglia (il caso che ti blocca) ritorni la lista con solo la riga della foglia, come il 90 e 70 dell'esempio. ora la ricorsione fa da sé, nel senso che ti devi scrivere solo come legare le righe insieme, ma il resto viene dato per scontato. se tu hai l'albero
80
_|_
| |
70 90
la ricorsione chiamata su 80 crea prima le foglie ['90'] e ['70'], poi le unisce seguendo i procedimenti che ti ho detto, che ovviamente devi scrivere tu. la funzione ricorsiva sarà quindi di questo tipo:
se ho una foglia ritorno la lista con dentro la foglia
se ho dei figli unisco prima le righe dei figli, ottenendo ad esempio ['70 90'], poi aggiungo le righe verticali, per farlo aggiungo una riga alla lista di righe che sarà così ['| | ','70 90'], poi ci metti un'altra riga che ha i collegamenti orizzontali e quello sotto al padre, e poi ci metti il padre
ora hai [' 80 ',' _|_ ','| | ','70 90'] che corrisponde proprio all'albero 80. ora immagina che l'albero sia così
10
__|__
| |
20 30
| _|_
40 | |
50 60
tu chiami la ricorsione su 10 che la chiama su 20 e su 30. il 20 ottiene la foglia 40 e la completa così ['20','| ','40']. il 30 invece ottiene le figlie 50 e 60 e le completa così
[' 30 ', _|_ ','| | ','50 60']. poi grazie alla ricorsione il 10 ottiene entrambe le liste, e deve unirle ottenendo quindi
[' 10 ',' __|__ ','| | ','20 30 ','| _|_ ','40 | | ',' 50 60']. alla fine devi solo unirle e diventano ' 10 \n __|__ \n| | \n20 30 \n| _|_ \n40 | | \n 50 60'