Artur
4/30/2007 10:11:00 PM
"Sowiecki_Agent" <przemyslaw.rokicki.WYTNIJ@gazeta.pl> wrote in message
news:f152ji$6ab$1@inews.gazeta.pl...
> Witam!
> Otoz przechowuje w bazie pewe elemmenty, struktura wyglada tak:
>
> id|id_parent|id|child|ilosc (w id_parent, id_child trzymam elemnty z
> talicy elementy)
>
> drzewo moze mec kilk arozgalezien, nieokrsloan liczbe poziomow.
> No i musze dysponujac tylko id_Parent uzyskac id_childy (wszystkie
> znajdujace
> sie na samym dole) przy czym ilosc po kazdym kroku schodzenia w dol musi
> byc
> przemnozona . np,
>
> jezlei drzewo wygalda tak
>
> X
> | |
> Y(2) Z(3)
> | |
> C(2) f(8)
>
> musze otrzymac wynik (podajac id X-a)
>
> c (4), f (16), z(3)
>
zakladajac ze masz zbudowane juz drzewo gdzie kazdy wezel jest klasy Node:
class Node
{
int id;
public int ilosc;
public Node[] Children;
}
i jezeli masz zadeklarowana globalnie jakas strukture gdzie bedziesz
przechowywal li¶cie (znaczy wezly nie majace dzieci), np. zwyklego stringa
string wynik="";
Jesli nastepujaca metode wywolasz tak
Mnoz(korzenDrzewa, 1);
to w stringu "wynik" bedzie ciag par (id liscia, liczba)
void Mnoz(Node n, int mnoznik)
{
if (n.Children.Length == 0) /
{
// natrafilem na lisc (wezel znajdujacy sie na samym dole)
wynik += "("+ n.id +","+n.ilosc*mnoznik+")"; //zapamietuje go
}
foreach (Node child in n.Children)
{
Mnoz(child, mnoznik * n.ilosc);
}
}
Jest to zwykle przchodzenie drzewa "w glab" z tym ze w parametrze "mnoznik"
pamietasz iloczyn wszystkich pol "ilosc" z wezlow od korzania az do danego
liscia.
Pozdrawiam, A.B.