|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Mar 2011
Messaggi: 125
|
[Python] Salvare e rigenerare Alberi
Sono all''ultimo esercizio di Pensare in Python, e non da pochi giorni, siccome mi sa che mi sono impelagato seguendo la strada non esattamente più consigliabile, che tuttavia non riesco a capire perché non funzioni.
Ho questo tipo di TDA: Codice:
class Albero: def __init__(self, Contenuto = None, Sinistra = None, Destra = None): self.Contenuto = Contenuto self.Sinistra = Sinistra self.Destra = Destra def __str__(self): return str(self.Contenuto) Codice:
def SalvaAlbero(Albero, Livello = 0):
if Albero == None: return
SalvaAlbero(Albero.Destra, Livello+1)
if Albero.Destra == None and Albero.Sinistra != None:
f.write(' '*Livello + ' ' + "\n")
if Albero.Destra != None and Albero.Sinistra == None:
f.write(' '*Livello + ' ' + "\n")
else:
f.write(' '*Livello + str(Albero.Contenuto))
if "\n" not in Albero.Contenuto:
f.write("\n")
SalvaAlbero(Albero.Sinistra, Livello+1)
Codice:
def Componi():
file = f.readlines()
i = 0
while i < len(file):
stringa = file[i]
if stringa[0] != " ":
stringa = stringa[0:len(stringa)-1]
Radice = Albero(stringa)
del file[i]
else:
i += 1
Scorri(Radice, file, Spazio = " ")
return Radice
def Scorri(Radice, file, Spazio = " "):
if Radice == None: return
i = 0
while i < len(file):
if Spazio in file[i] and Spazio + " " not in file[i]:
stringa = file[i]
if Spazio == stringa[0:len(Spazio)]:
stringa = stringa[0:len(stringa)-1]
stringa = stringa[0:len(Spazio)].replace(" ", "") + stringa[len(Spazio):len(stringa)]
Radice.Destra = Albero(stringa)
del file[i]
break
else:
continue
if file[i] == Spazio + " ":
Radice.Destra = None
break
else:
i += 1
i = 0
while i < len(file):
if Spazio in file[i] and Spazio + " " not in file[i]:
stringa = file[i]
if Spazio == stringa[0:len(Spazio)]:
stringa = stringa[0:len(stringa)-1]
stringa = stringa[0:len(Spazio)].replace(" ", "") + stringa[len(Spazio):len(stringa)]
Radice.Sinistra = Albero(stringa)
del file[i]
break
else:
continue
if file[i] == Spazio + " ":
Radice.Sinistra = None
break
else:
i += 1
Scorri(Radice.Destra, file, Spazio + " ")
Scorri(Radice.Sinistra, file, Spazio + " ")
f = open("/home/meurem/Scrivania/SaveTree", "w")
Radice = Albero("a", Albero("b", Albero("3", Albero("7"), Albero("9"))), Albero("c", Albero("4", Albero("8")), Albero("6", Albero("12"), Albero("14"))))
SalvaAlbero(Radice)
f.close()
f = open("/home/meurem/Scrivania/SaveTree", "r")
Tree = Componi()
print Tree #a
print Tree.Sinistra #b
print Tree.Destra #c
print Tree.Sinistra.Sinistra #3
print Tree.Sinistra.Destra #None
print Tree.Sinistra.Sinistra.Sinistra #7
print Tree.Sinistra.Sinistra.Destra #9
print Tree.Destra.Destra #6
print Tree.Destra.Destra.Destra # 14
print Tree.Destra.Destra.Sinistra #12
print Tree.Destra.Sinistra #4
print Tree.Destra.Sinistra.Sinistra #8
print Tree.Destra.Sinistra.Destra #None
Codice:
a b c 3 None None 6 14 12 4 8 [Finished in 0.0s] |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Mar 2011
Messaggi: 125
|
UP
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:29.



















