[python] Trideni stromu.
David Michal
david_michal na seznam.cz
Pátek Říjen 14 11:27:36 CEST 2005
Zdravim,.
mam nesetrideny seznam a[(id, parent_id)...]
Kde a[x][0] je ID zaznamu a a[x][1] je ID rodice, prvni zaznam v seznamu
je vzdy prvni ve stromu.
napr. [(1,0), (2,0),(3,1),(4,2)]
a potreboval bych ho setridit:
[(1,0),(3,1),(2,0),(4,2)]
Tzn. funkce vrati setrideny seznam tak aby vsechna decka byla umistena
za svym rodicem (umisteni decek dle poradi v seznamu a).
Nevite nekdo jak to resit?
Zkousel jsem bastlit ruzne rekurzivni funkce, ale zatim jsem dosahl
pouze zvyseneho hluku od ventilatoru pocitace.
Zatim nejblize jsem se dostal pomoci:
#a - vstup, b - vystup
def sortTree(a, b, pos = 0, cidu = [0,]):
if not a: return
i = a.pop(pos)
b.append(i)
for j in a:
pidu = j[-1]
if cidu[-1] == pidu:
pos = a.index(j)
print cidu, ',',pidu, ',', i
cidu.append(j[1])
sortTree(a, b, pos, cidu)
print cidu, ',', ',', i
if cidu <> [0,]: cidu.pop()
sortTree(a, b, 0, cidu)
Ale tahle funkce ma nekde velkou chybu, spatne tridi potomky.
Diky za jakykoliv napad,
David
Další informace o konferenci Python