<html>
<head>
<meta name="generator" content="Windows Mail 17.5.9600.20315">
<style data-externalstyle="true"><!--
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph {
margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.5in;
margin-bottom:.0001pt;
}
p.MsoNormal, li.MsoNormal, div.MsoNormal {
margin:0in;
margin-bottom:.0001pt;
}
p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst, 
p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle, 
p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast {
margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.5in;
margin-bottom:.0001pt;
line-height:115%;
}
--></style></head>
<body dir="ltr">
<div data-externalstyle="false" dir="ltr" style="font-family: 'Calibri', 'Segoe UI', 'Meiryo', 'Microsoft YaHei UI', 'Microsoft JhengHei UI', 'Malgun Gothic', 'sans-serif';font-size:12pt;"><div>Vi ammorbo ancora con gli alberi. Devo fare una funzione per trovare il path di una qualsiasi foglia di un albero.</div><div><br></div><div>Per fare ciò ho pensato di inserire nella classe che definisce l’albero un campo nodoGenitore, così, facendo la ricerca di un nodo per nome, quando trovo il nodo che mi interessa, vedo chi è il nodo padre e vado a ritroso fino alla radice e trovo il path completo della foglia.</div><div><br></div><div>Mi accade però una cosa strana, di sicuro sbaglio qualcosa io, l’init della classe è questo:</div><div><br></div><div>    def __init__(self,w):<br>        self.nomeNodo = w<br>        self.sottoNodi = []<br>        self.nodoGenitore=None<br></div><div data-signatureblock="true"><div><br></div><div>Quindi aggiungo i nodi all’albero con questa funzione:</div><div><br></div><div>#Genera l'albero di parole   <br>def _generaAlbero(word):<br>    root = WNode(word)<br>    listaNodi=_generaListaParole(word,root)<br>    for name in listaNodi:<br>        root.sottoNodi += [_generaAlbero(name.nomeNodo)]<br>    return root</div><div><br></div><div>#Genera lista parole lecite<br>def _generaListaParole(word,level):</div><div><br></div><div>    ret=[]<br>    nomiNodi=[]</div><div><br></div><div>    alfabeto='abcdefghijklmnopqrstuvwxyz'</div><div><br></div><div>    for j in range(0,len(word)+1):<br>        for i in range(0,len(alfabeto)):<br>            generata = word[0:j]+alfabeto[i] + word[j:]<br>            if _BinarySearch(generata)==True:<br>                inLista=generata in nomiNodi<br>                if inLista==False:<br>                    nomiNodi.append(generata)<br>                    tmpNode = WNode(generata)<br>                    tmpNode.nodoGenitore=level<br>                    print tmpNode.nodoGenitore.nomeNodo<br>                    ret.append(tmpNode)</div><div><br></div><div>    return ret </div><div><br></div><div>word è una stringa e level un nodo. La funzione durante l’esecuzione nel terminale mi stampa il nome del nodo genitore in modo corretto quando faccio:</div><div><br></div><div>print tmpNode.nodoGenitore.nomeNodo</div><div><br></div><div>Quando però vado a fare la ricerca della parola con questa funzione</div><div><br></div><div>    def path(self,w):<br>        self._path(self,w)<br></div><div><br></div><div>    def _path(self,root,w):<br>        for node in root.sottoNodi:<br>            if(node.nomeNodo==w):<br>                print "Trovato "+node.nomeNodo<br>                print node.sottoNodi<br>                print "        "+node.nodoGenitore.nomeNodo<br>                break<br>            else:<br>                self._path(node,w)</div><div><br></div><div>python mi dice che non può fare</div><div><br></div><div>print "        "+node.nodoGenitore.nomeNodo</div><div><br></div><div>in quanto il valore è None, ma in teoria dovrebbe contenere il nodo padre, solo la root dovrebbe essere vuota e il nodo che gli passo non è una root<br></div></div></div>
</body>
</html>