• Nie Znaleziono Wyników

pseudokody algorytmów DRZEWA

N/A
N/A
Protected

Academic year: 2021

Share "pseudokody algorytmów DRZEWA"

Copied!
12
0
0

Pełen tekst

(1)

DRZEWA

pseudokody algorytmów

(2)

Rekurencyjne przechodzenie przez drzewo – Funkcje rekurencyjne pobierają jako argument łącze do drzewa i wywołują funkcję visit, której

argumentem jest węzeł drzewa.

PREORDER

void traverse(link h, void visit(link)) { if (h == 0) return;

visit(h);

traverse(h->l, visit);

traverse(h->r, visit);

}

(3)

INORDER

void traverse(link h, void visit(link)) {

if (h == 0) return;

traverse(h->l, visit);

visit(h);

traverse(h->r, visit);

}

(4)

POSTORDER

void traverse(link h, void visit(link)) {

if (h == 0) return;

traverse(h->l, visit);

traverse(h->r, visit);

visit(h);

}

(5)

Nierekurencyjne przechodzenie przez drzewo (postorder)

void traverse(link h, void visit(link)) { STACK<link> s(max);

s.push(h);

while (!s.empty())

{ visit(h = s.pop());

if (h->r != 0)

s.push(h->r);

if (h->l != 0)

s.push(h->l);

}

}

(6)

Przechodzenie za pomocą przekształcania drzewa - algorytm Josepha M.Morrisa (inorder)

while nie koniec

if węzeł nie ma lewego syna {

odwiedź go;

idź w prawo;

} else

{

uczyń go prawym synem jego poprzednika;

idź do korzenia tego poddrzewa;

}

(7)

void balance ( dane [ ], int pocz, int kon) {

if (pocz <= kon) {

int m=(pocz+kon)/2;

wstaw (dane[m]);

balance (dane,pocz,m-1);

balance (dane, m+1,kon);

}

}

(8)

rotacjaprawa (S,O) // można wykonać na węźle dla // którego istnieje lewy syn

{

if O nie jest korzeniem

zastępujemy O przez S;

prawe poddrzewo S staje się lewym poddrzewem O;

węzeł O staje się prawym synem węzła S;

}

D D

O S

S A B O

B C C A

(9)

Utwórz_winorośl (korzeń, n) // prawe rotacje na węzłach // mających lewych synów

{

tmp = korzeń;

while (tmp != NULL) if tmp ma lewego syna {

wykonaj rotację tego syna względem tmp;

tmp = węzeł, który został ojcem;

}

else

tmp = węzeł, który jest prawym synem tmp;

}

Pierwszy etap algorytmu DSW – prostowanie drzewa.

(10)

Drugi etap - tworzenie drzewa doskonale zrównoważonego

Utwórz_drzewo_doskonałe (n) {

m = ;

wykonaj n-m rotacji od korzenia;

while (m>1) m=m/2;

wykonaj m rotacji od korzenia;

}

1 2 floor(ln(n1))

W każdym przejściu w dół winorośli co drugi węzeł aż do pewnego miejsca jest rotowany w lewo wokół swego rodzica. Pierwsze przejście jest potrzebne, aby uzyskać różnicę liczby węzłów w winorośli i liczby węzłów w najbliższym pełnym drzewie binarnym. 2 floor(ln(n1)) 1

(11)

Wstawianie elementu do kolejki realizowane jest jako dodanie do kopca ostatniego liścia; potem następuje odtworzenie własności kopca (poprzez przesuwanie ostatniego liścia ku korzeniowi dopóki nie dojdzie do korzenia lub nie trafi na ojca o mniejszej wartości).

WstawDoKolejki (el) {

wstaw el na koniec kopca (jako ostatni liść);

while ( el nie jest korzeniem i el > rodzic(el) ) zamień miejscami el i rodzic(el);

}

Algorytm wstawiania elementu do kolejki

(12)

Pobieranie elementu z kolejki polega na pobraniu elementu z korzenia,

zastąpieniu go ostatnim liściem i odtworzeniu własności kopca idąc od korzenia w dół.

PobierzZKolejki ( ) {

pobierz element z korzenia;

wstaw do korzenia element z ostatniego liścia;

usuń ostatni liść; //obydwa poddrzewa korzenia są kopcami p=korzeń;

while ( p nie jest liściem i p < któregokolwiek swojego dziecka) zamień miejscami p i jego większe dziecko;

}

Algorytm pobierania elementu z kolejki

Cytaty

Powiązane dokumenty

– DOCSIS zdefiniowany standard specyfikujący transmisję danych poprzez sieć HFC. •

warunki końcowe: jeśli to możliwe, funkcja dodaje element Pozycja do drzewa idąc na lewo każdego z węzłów, jeśli dana elementu w węźle jest większa od danej w Pozycja i

warunki końcowe: jeśli to możliwe, funkcja dodaje element Pozycja do drzewa idąc na lewo każdego z węzłów, jeśli dana elementu w węźle jest większa od danej w Pozycja i

[r]

kami od Warszawy, zdołał wprawdzie wydobyć się z za Wisły i przejść na prawy jej brzeg pod Maciejowice, lecz znalazł się tu w nader niekorzystnem położeniu. Trzeba go

Rezydenci w powieści Stanisława Rzewuskiego Hrabia Witold.. oraz w jego dramatach Le comte Witold i Na

Do randomizowanego badania SHARP z podwójnie ślepą próbą, którego wyniki opublikowano w Lancet, włączono 9270 pacjentów z przewlekłą chorobą nerek (w tym

Mimoto Kościuszko ułożył znakom ity plan pokonania nieprzyjaciela, który energicznie wykonany, m usiałby się ud ać i byłby niewątpliwie w a­!. w rzynam i