background image

Matematyka Dyskretna

Andrzej Szepietowski

25 czerwca 2002 roku

background image
background image

Rozdział 1

Struktury danych

1.1

Listy, stosy i kolejki

Lista to uporz¸adkowany ci¸ag elementów. Przykładami list s¸a wektory lub tablice jednowy-
miarowe. W wektorach mamy dost¸ep do dowolnego elementu, poprzez podanie indeksu
tego elementu.

Przykład 1.1 W j¸ezyku Pascal przykładem typu tablicy jednowymiarowej jest

array[1..N] of integer.

Je˙zeli mamy zmienn¸a tego typu

a:array[1..N] of integer,

to tablica

a

zawiera

N

elementów

a[1], a[2], ... ,a[N].

W programie mo˙zemy odwoływa´c si¸e do całej tablicy, na przykład w instrukcji przypisania

a:=b,

lub do pojedynczych elementów:

a[i]:=a[i+1].

Mo˙zemy tak˙ze u˙zywa´c tablic dwu lub wi¸ecej wymiarowych. Przykładem tablicy dwuwy-
miarowej jest typ

array[1..N,1..M] of real.

Zmienna

c:array[1..N,1..M] of real

zawiera

elementów. Dla ka˙zdej pary liczb

spełniaj¸acej warunki

,

, element

c[i,j]

zawiera liczb¸e typu

real.

Czasami wygodniej posługiwa´c si¸e listami bez u˙zywania indeksów. Przykładami list,

których mo˙zna u˙zywa´c bez konieczno´sci odwoływania si¸e do indeksów poszczególnych
elementów, s¸a kolejki i stosy.

3

background image

4

Rozdział 1. Struktury danych

Definicja 1.2 Kolejka jest list¸a z trzema operacjami:

dodawania nowego elementu na koniec kolejki,

zdejmowania pierwszego elementu z pocz¸atku kolejki,

sprawdzania, czy kolejka jest pusta.

Taki sposób dodawania i odejmowania elementów jest okre´slany angielskim skrótem

FIFO (first in first out, czyli pierwszy wszedł — pierwszy wyjdzie). Przykłady kolejek
spotykamy w sklepach, gdzie klienci czekaj¸acy na obsłu˙zenie tworz¸a kolejki.

Definicja 1.3 Stos jest list¸a z trzema operacjami:

dodawania elementu na wierzch stosu,

zdejmowania elementu z wierzchu stosu,

sprawdzania, czy stos jest pusty.

Na stosie dodajemy i odejmujemy elementy z tego samego ko ´nca, podobnie jak w

stosie talerzy spi¸etrzonym na stole. Talerze dokładane s¸a na wierzch stosu i zdejmowa-
ne z wierzchu stosu. Taka organizacja obsługi listy okre´slana jest angielskim skrótem
LIFO (last in first out, czyli ostatni wszedł – pierwszy wyjdzie). Niektórzy w ten spo-
sób organizuj¸a prac¸e na biurku. Przychodz¸ace listy układaj¸a na stosie i jak maj¸a czas, to
zdejmuj¸a jeden list i odpowiadaj¸a na niego.

Przyjrzyjmy si¸e zastosowaniu kolejki lub stosu do szukania. Przypu´s´cmy, ˙ze szukamy

przez telefon pewnej informacji (na przykład chcieliby´smy si¸e dowiedzie´c, kto z naszych
znajomych ma pewn¸a ksi¸a˙zk¸e).

Algorytm szukania ksi¸a˙zki w´sród znajomych

tworzymy STOS, który na pocz¸atku jest pusty,

wkładamy na STOS numer telefonu swojego znajomego,

powtarzamy dopóki na stosie s¸a jakie´s numery:

zdejmujemy z wierzchu STOSU jeden numer telefonu,

dzwonimy pod ten numer,

je˙zeli osoba, do której si¸e dodzwonili´smy, posiada szukan¸a ksi¸a˙zk¸e, to ko-

niec poszukiwa ´n,

je˙zeli nie posiada ksi¸a˙zki, to pytamy j¸a o numery telefonów jej znajomych,

którzy mog¸a mie´c ksi¸a˙zk¸e (lub zna´c kogo´s kto j¸a ma); ka˙zdy nowy numer zostaje
dopisany do STOSU.

W powy˙zszym algorytmie zamiast stosu mo˙ze by´c u˙zyta kolejka.

background image

1.2. Drzewa binarne

5

1.2

Drzewa binarne

Drzewo jest hierarchiczn¸a struktur¸a danych. Jeden element drzewa, zwany korzeniem, jest
wyró˙zniony. Inne elementy drzewa s¸a jego potomstwem lub potomstwem jego potomstwa
itd. Terminologia u˙zywana do opisu drzew jest mieszanin¸a terminów z teorii grafów, bo-
taniki i stosunków rodzinnych. Elementy drzewa nazywa si¸e wierzchołkami lub w¸ezłami.
Li´scie to wierzchołki nie maj¸ace potomstwa. Drzewa cz¸esto przedstawia si¸e w formie
grafu, gdzie ka˙zdy wierzchołek jest poł¸aczony kraw¸edzi¸a ze swoim ojcem i ze swoimi
dzie´cmi (swoim potomstwem). Dla ka˙zdego elementu w drzewie istnieje dokładnie jedna
´scie˙zka prowadz¸aca od korzenia do tego wierzchołka.

Drzewa binarne to takie drzewa, w których ka˙zdy wierzchołek ma co najwy˙zej dwóch

synów. Do oznaczania wierzchołków w drzewie binarnym wygodnie jest u˙zywa ´c ci¸agów
zer i jedynek. Niech

oznacza zbiór wszystkich sko ´nczonych ci¸agów zer i jedy-

nek. Zbiór ten zawiera ci¸ag pusty (długo´sci 0), oznaczany przez

. Wierzchołki drzewa

oznaczamy w nast¸epuj¸acy sposób:

korze´n drzewa oznaczamy przez

— pusty ci¸ag,

je˙zeli jaki´s wierzchołek jest oznaczony przez

, to jego synowie oznaczeni s¸a przez

i

.

Rysunek 1.1: Przykład drzewa binarnego

Przy takim oznaczeniu wierzchołków drzewa binarnego nazwa wierzchołka

mówi

nam, jaka ´scie˙zka prowadzi od korzenia do

. Na przykład, aby doj´s´c od korzenia do

wierzchołka

nalezy: pój´s´c w prawo do

, potem znowu w prawo do

, a na ko ´ncu w

lewo do

.

background image

6

Rozdział 1. Struktury danych

Je˙zeli mamy drzewo binarne

, to z ka˙zdym wierzchołkiem

mo˙zemy skojarzy ´c

poddrzewo

zło˙zone z wierzchołka

i wszystkich jego potomków. Na przykład w

drzewie przedstawionym na rysunku 1.1 wierzchołek

wyznacza poddrzewo

przedstawione na rysunku 1.2.

Rysunek 1.2: Poddrzewo

Mówimy te˙z, ˙ze drzewo

składa si¸e z korzenia (wierzchołka

), z lewego poddrzewa

i z prawego poddrzewa

.

Wysoko´sci¸a drzewa nazywamy długo´s´c (liczb˛e kraw˛edzi) najdłu˙zszej ´scie˙zki w drze-

wie prowadz¸acej od korzenia do li´scia. Na przykład drzewo z rysunku 1.1 jest wysoko´sci
3.

1.3

Drzewa wyra˙ze ´n arytmetycznych

Przykładem zastosowania drzew binarnych s¸a drzewa wyra˙ze ´n arytmetycznych. Najpierw
przykład. Na rysunku 1.3 przedstawiono drzewo wyra˙zenia

. W drzewie tym ka˙z-

dy wierzchołek ma etykiet¸e. Li´scie etykietowane s¸a stałymi albo zmiennymi. Wierzchołki
nie b¸ed¸ace li´s´cmi etykietowane s¸a operacjami arytmetyczymi. Ka˙zdemu wierzchołkowi
w drzewie mo˙zemy przypisa´c wyra˙zenie arytmetyczne według nast¸epuj¸acej zasady:

dla li´sci wyra˙zeniami s¸a etykiety tych li´sci (stałe lub zmienne),

je˙zeli wierzchołek

ma etykiet¸e

, a jego synom przypisano wyra˙zenia

i

, to wierzchołkowi

przypisujemy wyra˙zenie

 

!

.

Przykład 1.4 W drzewie z rysunku1.3 wierzchołkowi z etykiet ˛

a

odpowiada wyra˙zenie

, wierzchołkowi z etykiet ˛

a

wyra˙zenie

"

, a korzeniowi wyra˙zenie

#

$%"

!'&

Wyra˙zenie to zawiera wi¸ecej nawiasów, ni˙z to si¸e zwykle stosuje. Normalnie to samo wy-
ra˙zenie przedstawiamy bez nawiasów w postaci

()

.

background image

1.3. Drzewa wyra˙ze ´n arytmetycznych

7

Rysunek 1.3: Drzewo wyra˙zenia

)

Opuszczenie nawiasów mo˙ze prowadzi´c do niejednoznaczno´sci lub mo˙ze zmieni´c

sens wyra˙zenia. Na przykład wyra˙zenie

%

po opuszczeniu nawiasów stanie si¸e identyczne z wyra˙zeniem

"$"

i zmieni sens.

Drzewo, które odpowiada wyra˙zeniu

%

, przedstawiono na rysunku 1.4.

Rysunek 1.4: Drzewo wyra˙zenia

()

Drzewo wyra˙zenia arytmetycznego oddaje logiczn¸a struktur¸e i sposób obliczania tego

wyra˙zenia.

background image

8

Rozdział 1. Struktury danych

Istnieje sposób przedstawiania wyra˙ze ´n arytmetycznych nie wymagaj¸acy nawiasów.

Jest to tak zwana notacja polska lub Łukasiewicza. Jest ona te˙z nazywana notacj¸a postfixow¸a,
poniewa˙z znak operacji stoi na ko ´ncu wyra˙zenia, za argumentami, czyli wyra˙zenie w no-
tacji postfixowej ma posta´c:

pierwszy argument — drugi argument — operacja.

Notacja, do jakiej jeste´smy przyzwyczajeni, nazywa si¸e infixowa, poniewa˙z operacja znaj-
duje si¸e pomi¸edzy argumentami, czyli wyra˙zenie w notacji infixowej ma posta ´c:

pierwszy argument — operacja — drugi argument.

Przykład 1.5 Wyra˙zenie w postaci postfixowej

!

ma w postaci infixowej posta´c

a wyra˙zenie

!

jest postfixow¸a postaci¸a wyra˙zenia

()

&

W wyra˙zeniach w postaci postfixowej nie potrzeba nawiasów. Warto´s´c wyra˙zenia mo˙zna
w sposób jednoznaczny odtworzy´c z samego wyra˙zenia za pomoc¸a nast˛epuj ˛

acego algo-

rytmu.:

Algorytm obliczania warto´sci wyra˙zenia w postaci postfixowej.

Dla kolejnych elementów zapisu wyra˙zenia:

je˙zeli element jest stał¸a lub zmienn¸a, to wkładamy jego warto´s´c na stos,

je˙zeli element jest znakiem operacji, to:

zdejmujemy dwie warto´sci z wierzchu stosu,

wykonujemy operacj¸e na tych warto´sciach,

obliczon¸a warto´s´c wkładamy na wierzch stosu,

po przej´sciu całego wyra˙zenia jego warto´s´c znajduje si¸e na stosie.

Przykład 1.6 Zademonstrujmy ten algorytm na przykładzie wyra˙zenia:

"

Załó˙zmy, ˙ze zmienne maj¸a nast¸epuj¸ace warto´sci:

,

,

,

,

.

Poni˙zsza tabela przedstawia zawarto´s´c stosu po przeczytaniu kolejnych elementów wyra-
˙zenia.

background image

1.4. Przeszukiwanie drzew binarnych

9

czytany element

stos

a

3,

b

3, 2,

c

3, 2, 1,

3, 3,

9,

d

9, 4,

e

9, 4, 2,

9, 2,

11.

1.4

Przeszukiwanie drzew binarnych

Zajmiemy si¸e teraz dwoma algorytmami przeszukiwania drzew (binarnych): przeszuki-
wanie w gł¸ab i wszerz. Ró˙zni¸a si¸e one rodzajem u˙zytych struktur danych. W algorytmie
przeszukiwania w gł¸ab u˙zyjemy stosu, a w algorytmie przeszukiwania wszerz u˙zyjemy
kolejki.

1.4.1

Przeszukiwanie drzewa w gł ˛

ab

Algorytm przeszukiwania drzewa w gł¸ab.

Dane wej´sciowe: drzewo

.

odwiedzamy korze ´n

i wkładamy go na STOS; zaznaczamy

jako wierzchołek

odwiedzony,

dopóki STOS nie jest pusty, powtarzamy:

je˙zeli

jest wierzchołkiem na wierzchu STOSU, to sprawdzamy, czy istnieje

syn

wierzchołka , który nie był jeszcze odwiedzony, najpierw sprawdzamy

,

a potem

.

je˙zeli takie

si¸e znajdzie, to odwiedzamy

, wkładamy go na wierzch STO-

SU i zaznaczamy jako wierzchołek odwiedzony,

je˙zeli takiego

nie ma, to zdejmujemy

ze STOSU i cofamy si¸e do wierz-

chołka b¸ed¸acego na stosie pod spodem.

Przykład 1.7 Poni˙zsza tabela pokazuje jaki wierzchołek jest odwiedzany i jaka jest za-
warto´s´c stosu po ka˙zdej kolejnej iteracji p¸etli algorytmu, gdy przeszukiwane jest drzewo
z rysunku 1.1.

background image

10

Rozdział 1. Struktury danych

Wierzchołek

STOS

0

,0

00

,0,00

0

,0

01

,0,01

0

,0

1

,1

10

,1,10

1

,1

11

,1,11

110

,1,11,110

11

,1,11

111

,1,11,111

11

,1,11

1

,1

W metodzie przeszukiwania w gł¸ab po ka˙zdym kroku algorytmu wierzchołki znajduj¸ace
si¸e na stosie tworz¸a ´scie˙zk¸e od wierzchołka wej´sciowego do wierzchołka aktualnie od-
wiedzanego. Zauwa˙zmy, ˙ze nazwa ka˙zdego wierzchołka na stosie jest prefiksem (przed-
rostkiem) nazwy nast¸epnego wierzchołka. Dlatego wystarczy przechowywa ´c ostatnie bity
wierzchołków na stosie. Nie jest te˙z konieczne zaznaczanie, które wierzchołki były ju˙z
odwiedzone, wystarczy zauwa˙zy´c, ˙ze:

je˙zeli przyszli´smy do wierzchołka

od jego ojca, to ˙zaden z synów

nie był jeszcze

odwiedzany,

je˙zeli przyszli´smy do wierzchołka

od lewego syna

(po zdj¸eciu

ze stosu), to

odwiedzony był tylko lewy syn,

je˙zeli przyszli´smy do wierzchołka

od prawego syna

(po zdj¸eciu

ze stosu), to

odwiedzeni ju˙z byli obaj synowie.

Oto prostsza wersja algorytmu przeszukiwania w gł¸ab:

Algorytm przeszukiwania drzewa w gł¸ab (druga wersja).

Dane wej´sciowe: drzewo

.

odwiedzamy korze ´n

i wkładamy go na STOS,

dopóki STOS nie jest pusty, powtarzamy:

Je˙zeli

jest aktualnie odwiedzanym wierzchołkiem i

Je˙zeli ostatni¸a operacj¸a na stosi było wło˙zenie nowego elementu, to:

Je˙zeli

, to przejd´z do

i włó˙z 0 na stos,

Je˙zeli

ale

, to przejd´z do

i włó˙z 1 na stos,

background image

1.4. Przeszukiwanie drzew binarnych

11

Je˙zeli

oraz

, to zdejmij ostatni element ze stosu i przejd´z do

ojca wierzchołka .

Je˙zeli ostatni¸a operacj¸a na stosie było zdj¸ecie 0 to:

Je˙zeli

, to przejd´z do

i włó˙z 1 na stos,

Je˙zeli

, to zdejmij ostatni element ze stosu i przejd´z do ojca wierz-

chołka .

Je˙zeli ostatni¸a operacj¸a na stosie było zdj¸ecie 1 to: zdejmij ostatni element ze stosu
i przejd´z do ojca wierzchołka .

Przykład 1.8 Poni˙zsza tabela pokazuje jaki wierzchołek jest odwiedzany i jaka jest za-
warto´s´c stosu po ka˙zdej kolejnej iteracji p¸etli drugiego algorytmu, gdy przeszukiwane jest
drzewo z rysunku 1.1.

Wierzchołek

STOS

0

,0

00

,0,0

0

,0

01

,0,1

0

,0

1

,1

10

,1,0

1

,1

11

,1,1

110

,1,1,0

11

,1,1

111

,1,1,1

11

,1,1

1

,1

Zauwa˙zmy, ˙ze etykiety na stosie zł¸aczone razem tworz¸a nazw¸e aktualnie odwiedzanego
wierzchołka.

1.4.2

Przeszukiwanie drzewa wszerz

Nast¸epny algorytm przeszukiwania drzew u˙zywa kolejki jako pomocniczej struktury da-
nych.

Algorytm przeszukiwania wszerz.

Dane wej´sciowe: drzewo

.

odwiedzamy korze ´n drzewa

i wkładamy go do KOLEJKI.

background image

12

Rozdział 1. Struktury danych

dopóki KOLEJKA nie jest pusta, powtarzamy:

bierzemy jeden wierzchołek

z pocz¸atku KOLEJKI,

odwiedzamy wszystkiech synów wierzchołka

i wkładamy je na koniec

kolejki.

Poni˙zej przedstawiono odwiedzane wierzchołki oraz zawarto´s´c kolejki po ka˙zdej kolejnej
iteracji p¸etli algorytmu przeszukiwania wszerz drzewa przedstawionego na rysunku 1.1.

wierzchołki

KOLEJKA

0,1

0,1

00,01

1,00,01

10,11

00,01,10,11

-

01,10,11

-

10,11

-

11

110,111

110,111

-

111

-

-

W metodzie przeszukiwania wszerz wierzchołki s¸a przeszukiwane w kolejno´sci od wierz-
chołków b¸ed¸acych najbli˙zej wierzchołka pocz¸atkowego do wierzchołków b¸ed¸acych dalej.

1.4.3

Rekurencyjne algorytmy przeszukiwania drzew

Istnieje prosty i ciekawy sposób uzyskiwania postaci postfixowej wyra˙zenia arytmetycz-
nego z drzewa tego wyra˙zenia. Aby uzyska´c posta´c postfixow¸a wyra˙zenia, nale˙zy prze-
szuka´c drzewo tego wyra˙zenia w pewien okre´slony sposób, zwany przeszukiwaniem po-
storder.

Przeszukiwanie postorder. Aby przeszuka´c (pod)drzewo maj¸ace swój korze ´n w wierz-
chołku

:

przeszukujemy jego lewe poddrzewo (z korzeniem w

),

przeszukujemy jego prawe poddrzewo (z korzeniem w

),

odwiedzamy wierzchołek

(korze ´n drzewa).

Algorytm ten mo˙zemy krótko przedstawi´c w schemacie:

lewe poddrzewo — prawe poddrzewo — korze ´n.

Przykład 1.9 Je˙zeli przeszukamy drzewo z rysunku 1.4 i wypiszemy po kolei etykiety od-
wiedzanych wierzchołków, to otrzymamy ci¸ag:

który jest postaci¸a postfixow¸a wyra˙zenia

()

.

background image

1.5. Drzewa poszukiwa ´n binarnych

13

Istniej¸a jeszcze dwie inne pokrewne metody przeszukiwania drzew binarnych: inorder

i preorder:

Przeszukiwanie inorder. Aby przeszuka´c (pod)drzewo maj¸ace swój korze ´n w wierzchoł-
ku

:

przeszukujemy jego lewe poddrzewo (z korzeniem w

),

odwiedzamy wierzchołek

(korze ´n drzewa),

przeszukujemy jego prawe poddrzewo (z korzeniem w

).

Przeszukiwanie preorder. Aby przeszuka´c (pod)drzewo maj¸ace swój korze ´n w wierz-
chołku

:

odwiedzamy wierzchołek

(korze ´n drzewa),

przeszukujemy jego lewe poddrzewo (z korzeniem w

),

przeszukujemy jego prawe poddrzewo (z korzeniem w

).

Przykład 1.10 Je˙zeli przeszukamy drzewo z rysunku 1.4 metod¸a inorder, to etykiety utworz¸a
ci¸ag:

czyli wyra˙zenie w postaci infixowej, ale bez nawiasów. Przeszukanie tego samego drzewa
metod¸a preorder da ci¸ag etykiet:

)

Jest to tak zwana posta´c prefixowa wyra˙zenia. Znak operacji wyst¸epuje w niej przed ar-
gumentami. Podobne jak w postaci postfixowej, posta´c prefixowa da si¸e jednoznacznie
rozkłada´c i nie wymaga nawiasów.

1.5

Drzewa poszukiwa ´n binarnych

Drzewa s¸a podstawow¸a struktur¸a przy budowie du˙zych baz danych. Jed¸a z najprostszych
takich struktur s¸a drzewa poszukiwa ´n binarnych. Aby utworzy´c drzewo poszukiwa ´n bi-
narnych, zaczynamy od pustego drzewa, a nast¸epnie wstawiamy po kolei elementy, któ-
re maj¸a by´c przechowywane w drzewie. Wstawiane elementy powinny by ´c z jakiego´s
uporz¸adkowanego zbioru. Poni˙zej przedstawiamy algorytmu wstawiania elementów do
drzewa.

oznacza warto´s´c przechowywan¸a w wierzchołku

. Pami¸etajmy, ˙ze

oznacza poddrzewo o korzeniu w wierzchołku

.

Algorytm wstawiania elementu do drzewa poszukiwa ´n binarnych.

Aby wstawi´c element

do drzewa

:

je˙zeli drzewo

jest puste, to

(wstaw

do korzenia

),

background image

14

Rozdział 1. Struktury danych

w przeciwnym razie porównaj

z zawarto´sci¸a korzenia

:

je˙zeli

, to wstaw

do poddrzewa

,

je˙zeli

, to wstaw

do poddrzewa

.

Przykład 1.11 Przypu´s´cmy, ˙ze mamy ci¸ag liczb naturalnych:

#

!

&

Utworzymy dla tego ci¸agu drzewo poszukiwa´n binarnych.

Rysunek 1.5: Drzewo poszukiwa ´n po wstawieniu elementów: 128, 76, 106, 402

Po wstawieniu pierwszych czterech elementów ci¸agu otrzymamy drzewo, które jest

przedstawione na rysunku 1.5, a po wstawieniu całego ci¸agu otrzymamy drzewo, które
jest przedstawione na rysunku 1.6. Je˙zeli teraz przeszukamy to drzewo metod¸a inorder, to
otrzymamy ten sam ci¸ag, ale uporz¸adkowany:

!

!

&

Je˙zeli mamy ju˙z drzewo poszukiwa ´n binarnych

, to dla ka˙zdego wierzchołka

zachodzi

dla ka˙zdego

,

,

dla ka˙zdego

,

.

Czyli wszystkie wierzchołki w lewym poddrzewie

zawieraj ˛

a warto´sci mniejsze

od warto´sci w

, a wszystkie wierzchołki w prawym poddrzewie

zawieraj ˛

a warto´sci

mniejsze od warto´sci w

.

Aby stwierdzi´c, czy jaki´s element

znajduje si¸e na tym drzewie. Post¸epujemy podob-

nie jak przy wstawianiu elementów. Zaczynamy od korzenia drzewa

i szukamy

elementu

za pomoc¸a poni˙zszego algorytmu.

background image

1.6. Zadania

15

Rysunek 1.6: Drzewo dla ci¸agu: 128,76,106,402,100,46,354,1018,112,28, 396,35

Algorytm szukania elementu

na drzewie

.

Aby stwierdzi´c, czy element

znajduje si¸e na drzewie

:

je˙zeli

jest puste, to koniec, elementu

nie ma na drzewie,

je˙zeli

nie jest puste, to porównujemy

z warto´sci¸a

:

je˙zeli

(

, to koniec, znale´zli´smy element

na drzewie,

je˙zeli

, to szukamy

w lewym poddrzewie

,

je˙zeli

, to szukamy

w prawym poddrzewie

.

W drzewie poszukiwa ´n binarnych czas wyszukiwania lub wstawiania elementu jest

, gdzie

jest wysoko´sci¸a drzewa. W obu algorytmach tylko raz przechodzimy od

korzenia w dół do li´scia. Najlepiej by było, gdyby wysoko´s´c drzewa była rz¸edu logarytm
od liczby wierzchołków, ale nie w ka˙zdym drzewie poszukiwa ´n binarnych tak musi by´c.

1.6

Zadania

1. Ile wierzchołków mo˙ze mie´c drzewo binarne wysoko´sci

?

2. Przeszukaj metod¸a „w gł¸ab” („wszerz”) drzewo z rysunku 1.7.

3. Narysuj drzewo dla wyra˙zenie

. Przedstaw to wyra˙zenie w postaci

postfixowej i prefixowej.

background image

16

Rozdział 1. Struktury danych

4. Narysuj drzewo dla wyra˙zenie

. Przedstaw to wyra˙zenie w postaci

infixowej i prefixowej. Oblicz warto´s´c tego wyra˙zenia. Przedstaw to wyra˙zenie w
postaci infixowej i prefixowej.

5. Wypisz w postaci infixowej, prefixowej i postfixowej wyra˙zenie przedstawione na

rysunku 7.

Rysunek 1.7: Drzewo wyra˙zenia

6. Narysuj drzewo poszukiwa ´n binarnych dla nast¸epuj¸acego ci¸agu liczb: 30, 43, 13, 8,

50, 40, 20, 19, 22.

7. Narysuj drzewo poszukiwa ´n binarnych dla nast¸epuj¸acego ci¸agu słów: słowik, wró-

bel, kos, jaskółka, kogut, dzi¸ecioł, gil, kukułka, szczygieł, sowa, kruk, czubatka.

[Fragment wiersza Ptasie radio Juliana Tuwima]

8. Udowodnij, ˙ze ka˙zde drzewo o

werzchołkach ma

kraw¸edzi.

9. Udowodnij, ˙ze ka˙zde pełne drzewo binarne o

li´sciach ma

wierzchołków

wewn¸etrznych.

Wskazówka. Drzewo binarne nazywa si¸e pełne, je˙zeli ka˙zdy jego wierzchołek ma
albo dwóch synów, albo nie ma synów wcale (jest li´sciem).