[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