ho bisogno di iterare un albero/grafico e produrre una certa uscita ma seguendo alcune regole:Come iterare questo albero/grafico
_ d
// \
b c _e
/ /|
a f g
Il risultato atteso dovrebbe essere (ordine irrilevante):
{'bde', 'bcde', 'abde', 'abcde', 'bdfe', 'bdfge', 'abdfe', ...}
le regole sono:
- la cima dell'albero 'BDE' (leftmost_root_children + radice + rightmost_root_children) devono essere sempre presenti
- L'ordine left-right deve essere conservato, ad esempio le combinazioni 'cb' o 'gf' non sono consentite.
- Tutti i percorsi seguono la direzione da sinistra a destra.
Devo trovare tutti i percorsi seguendo queste regole. Sfortunatamente non ho uno sfondo in CS e la mia testa sta esplodendo. Qualsiasi suggerimento sarà utile.
EDIT: Questa struttura rappresenta il mio albero molto da vicino:
class N():
"""Node"""
def __init__(self, name, lefts, rights):
self.name = name
self.lefts = lefts
self.rights = rights
tree = N('d', [N('b', [N('a', [], [])], []), N('c', [], [])],
[N('e', [N('f', [], []), N('g', [], [])],
[])])
o può essere più leggibile:
N('d', lefts =[N('b', lefts=[N('a', [], [])], rights=[]), N('c', [], [])],
rights=[N('e', lefts=[N('f', [], []), N('g', [], [])], rights=[])])
Mostra ciò che hai provato! – ovgolovin
a dire il vero non so come iniziare. Stavo pensando un doppio ciclo ma sento che in qualche modo ho bisogno di fare qualche ricorsione. Non riesco a mettere tutto insieme. –
non esiste un percorso diretto tra d e f/ge oppure b e c.è davvero difficile scoprire la logica (perché e quando saltare da d a g, quindi andare a f e tornare a e) dietro le uscite previste. – marmeladze