Vi ammorbo ancora con gli alberi. Devo fare una funzione per trovare il path di 
una qualsiasi foglia di un albero.


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.


Mi accade però una cosa strana, di sicuro sbaglio qualcosa io, l’init della 
classe è questo:


    def __init__(self,w):
        self.nomeNodo = w
        self.sottoNodi = []
        self.nodoGenitore=None




Quindi aggiungo i nodi all’albero con questa funzione:


#Genera l'albero di parole   
def _generaAlbero(word):
    root = WNode(word)
    listaNodi=_generaListaParole(word,root)
    for name in listaNodi:
        root.sottoNodi += [_generaAlbero(name.nomeNodo)]
    return root


#Genera lista parole lecite
def _generaListaParole(word,level):


    ret=[]
    nomiNodi=[]


    alfabeto='abcdefghijklmnopqrstuvwxyz'


    for j in range(0,len(word)+1):
        for i in range(0,len(alfabeto)):
            generata = word[0:j]+alfabeto[i] + word[j:]
            if _BinarySearch(generata)==True:
                inLista=generata in nomiNodi
                if inLista==False:
                    nomiNodi.append(generata)
                    tmpNode = WNode(generata)
                    tmpNode.nodoGenitore=level
                    print tmpNode.nodoGenitore.nomeNodo
                    ret.append(tmpNode)


    return ret 


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:


print tmpNode.nodoGenitore.nomeNodo


Quando però vado a fare la ricerca della parola con questa funzione


    def path(self,w):
        self._path(self,w)



    def _path(self,root,w):
        for node in root.sottoNodi:
            if(node.nomeNodo==w):
                print "Trovato "+node.nomeNodo
                print node.sottoNodi
                print "        "+node.nodoGenitore.nomeNodo
                break
            else:
                self._path(node,w)


python mi dice che non può fare


print "        "+node.nodoGenitore.nomeNodo


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
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a