Algorytmy i Struktury Danych

Podobne dokumenty
Algorytmy i Struktury Danych

Algorytmy i Struktury Danych.

Wysokość drzewa Głębokość węzła

ALGORYTMY I STRUKTURY DANYCH

Algorytmy i Struktury Danych

Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Porządek symetryczny: right(x)

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Wykład 8. Drzewa AVL i 2-3-4

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Wykład 6. Drzewa poszukiwań binarnych (BST)

Listy, kolejki, stosy

ALGORYTMY I STRUKTURY DANYCH

Wykład 2. Drzewa poszukiwań binarnych (BST)

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Lista liniowa dwukierunkowa

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Sortowanie bąbelkowe

Algorytmy i struktury danych. wykład 5

Drzewa wyszukiwań binarnych (BST)

Drzewa poszukiwań binarnych

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

Algorytmy i Struktury Danych.

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Struktury danych: stos, kolejka, lista, drzewo

Drzewa poszukiwań binarnych

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Drzewa czerwono-czarne.

Algorytmy i Struktury Danych.

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna

dr inż. Paweł Myszkowski Wykład nr 11 ( )

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.

. Podstawy Programowania 2. Drzewa bst - część druga. Arkadiusz Chrobot. 12 maja 2019

Struktury Danych i Złożoność Obliczeniowa

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

PODSTAWY INFORMATYKI wykład 6.

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Przypomnij sobie krótki wstęp do teorii grafów przedstawiony na początku semestru.

Drzewa podstawowe poj

Ogólne wiadomości o grafach

Wykład 3. Drzewa czerwono-czarne

Tadeusz Pankowski

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Algorytmy i struktury danych

Podstawy Informatyki. Metody dostępu do danych

Programowanie obiektowe

Wstęp do programowania

Algorytmy i struktury danych Struktury danych - drzewa IS/IO, WIMiIP

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych

Programowanie obiektowe

Algorytmy i struktury danych Struktury danych IS/IO, WIMiIP

Teoretyczne podstawy informatyki

Algorytmy i Struktury Danych. (c) Marcin Sydow. Słownik. Tablica mieszająca. Słowniki. Słownik uporządkowany. Drzewo BST.

STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA. Część 3. Drzewa Przeszukiwanie drzew

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Stos LIFO Last In First Out

Algorytmy i Struktury Danych, 9. ćwiczenia

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Algorytmy i struktury danych

Algorytmy i Struktury Danych.

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

Algorytmy i Struktury Danych.

Dynamiczne struktury danych

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

. Podstawy Programowania 2. Drzewa bst - część pierwsza. Arkadiusz Chrobot. 22 maja 2016

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Podstawy Informatyki. Wykład 6. Struktury danych

Teoretyczne podstawy informatyki

UNIWERSYTET GDAŃSKI MATERIAŁY DYDAKTYCZNE DO PRZEDMIOTU MATEMATYKA DYSKRETNA. pod redakcją: Hanna Furmańczyk Karol Horodecki Paweł Żyliński

Algorytmy i Struktury Danych.

Abstrakcyjne struktury danych - stos, lista, drzewo

Egzaminy i inne zadania. Semestr II.

Koszt zamortyzowany. Potencjał - Fundusz Ubezpieczeń Kosztów Algorytmicznych

Przykładowe B+ drzewo

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Matematyka dyskretna - 7.Drzewa

Drzewo binarne BST. LABORKA Piotr Ciskowski

Algorytmy grafowe. Wykład 2 Przeszukiwanie grafów. Tomasz Tyksiński CDV

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

dodatkowe operacje dla kopca binarnego: typu min oraz typu max:

INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra

Definicja pliku kratowego

Drzewa AVL definicje

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

Podstawowe pojęcia dotyczące drzew Podstawowe pojęcia dotyczące grafów Przykłady drzew i grafów

Ogólne wiadomości o drzewach

Sztuczna Inteligencja i Systemy Doradcze

Transkrypt:

Algorytmy i Struktury Danych Drzewa poszukiwań binarnych dr hab. Bożena Woźna-Szcześniak Jan Długosz University, Poland Wykład 8 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 1 / 52

Plan wykładu Drzewiaste struktury danych Dlaczego ich potrzebujemy Podstawowe definicje Dynamiczne realizacje Drzewa poszukiwań binarnych (BST) Definicja Odwiedzanie wierzchołków Wyszukiwanie danego elementu, wyszukiwanie maksimum i minimum Wstawianie nowego elementu do drzewa Usuwanie elementu z drzewa Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 2 / 52

Wstawianie i wyszukiwanie kluczy Tablice nieposortowane Tablice posortowane Drzewa poszukiwań binarnych Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 3 / 52

Tablice nieposortowane Operacja wstawiania na koniec Złożoność O(1) Operacja wstawiania na poczatek Złożoność O(n) Operacja wyszukiwania elementu (wyszukiwanie liniowe) Złożoność O(n) A może jest coś lepszego... Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 4 / 52

Tablice posortowane Operacja wstawiania równoważne sortowaniu przez wstawianie, złożoność O(n 2 ). Operacja wyszukiwania elementu (wyszukiwanie binarne) Złożoność O(log(n)). Potrzebujemy czegoś lepszego... Algorytm bisekcji (Tab,n,x): 1: i := 0; j := n 1; 2: while (j i > 1) do 3: m := (i + j)div2; 4: if Tab[m] x then 5: i := m; 6: else 7: j := m; 8: end if 9: end while 10: if Tab[i] = x then 11: return true; 12: else 13: return false; 14: end if Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 5 / 52

Drzewa Drzewa poszukiwań binarnych (BST) Kopce Drzewa AVL - nazwa AVL pochodzi od nazwisk rosyjskich matematyków: Gieorgij Adelson-Wielskij i Jewgienij Łandis Drzewa Czerwono-Czarne B-drzewa... Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 6 / 52

Drzewa - podstawowa terminologia I Definicja Drzewem nazywamy spójny i acykliczny graf nieskierowany. Graf jest spójny, gdy dowolne dwa wierzchołki sa połaczone droga. Graf jest acykliczny, jeśli nie posiada cyklu. Drzewo, w którym wyróżniony jest jeden, charakterystyczny wierzchołek nazywamy drzewem z korzeniem. Korzeń jest jedynym elementem drzewa, który nie posiada poprzednika (rodzica). Dla każdego innego wierzchołka określony jest dokładnie jeden rodzic. Wierzchołki znajdujace się bezpośrednio pod danym węzłem nazywamy synami (lub dziećmi). Wierzchołki, które nie maja potomków nazywane sa liśćmi. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 7 / 52

Drzewa - podstawowa terminologia II Dla każdego drzewa można określić: głębokość wierzchołka u - liczba wierzchołków, przez które należy przejść od korzenia do wierzchołka u. wysokość u - maksymalna liczba wierzchołków na drodze od u do pewnego liścia. wysokość drzewa = głębokość = wysokość korzenia +1 ścieżka z u do v- zbiór wierzchołków, przez które należy przejść z wierzchołka u do v. droga = ścieżka skierowana. stopień wierzchołka - liczba jego bezpośrednich następników. stopień drzewa - maksymalny stopień wierzchołka. Jeżeli liczba następników dla każdego wierzchołka wynosi co najwyżej dwa, to takie drzewo nazywamy binarnym. Zupełne drzewo binarne - Każdy węzeł, z wyjatkiem liści, ma dokładnie dwa następniki. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 8 / 52

Drzewa - podstawowa terminologia III 1 2 3 4 5 6 7 Rysunek: Zupełne drzewo binarne Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 9 / 52

Drzewo poszukiwań binarnych (BST) I Definicja Dla każdego węzła (nie będacego liściem) wszystkie wartości przechowywane w lewym poddrzewie sa mniejsze od wartości tego węzła, natomiast wszystkie wartości przechowywane w prawym poddrzewie sa większe od wartości w tym węźle. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 10 / 52

Drzewo poszukiwań binarnych (BST) II 15 7 30 4 13 25 34 2 NIL NIL 27 Rysunek: Drzewo poszukiwań binarnych Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 11 / 52

Drzewo poszukiwań binarnych - przykłady I 2 NIL 3 NILL 4 NILL 5 NILL 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 12 / 52

Drzewo poszukiwań binarnych - przykłady II 2 1 3 NILL 4 NILL 5 NILL 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 13 / 52

Drzewo binarne, ale nie poszukiwań binarnych I 2 NIL 3 NILL 0 NILL 5 NILL 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 14 / 52

Drzewo binarne, ale nie poszukiwań binarnych II 2 10 3 NILL 4 NILL 5 NILL 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 15 / 52

Kopiec (sterta) I Definicja Wartości przechowywane w następnikach każdego węzła sa mniejsze od wartości w danym węźle (tzw. kopiec maksymalny) lub wartości przechowywane w następnikach każdego węzła sa większe od wartości w danym węźle (tzw. kopiec minimalny). Drzewo jest szczelnie wypełniane (zrównoważone) od lewego poddrzewa. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 16 / 52

Kopiec (sterta) II 1 2 5 4 3 7 8 9 10 6 NIL Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 17 / 52

Inne rodzaje drzew zbalasowanych I Drzewo AVL (1962 - Adelson-Velskii, Landis) - Drzewo BST jest drzewem AVL wtedy, kiedy dla każdego wierzchołka wysokości dwóch jego poddrzew różnia się o co najwyżej jeden poziom; Drzewo Czerwono-Czarne: jest drzewem poszukiwań binarnych; każdy jego węzeł jest czerwony lub czarny; ma czarny korzeń; czerwony węzeł ma zawsze czarnego ojca; ilość czarnych węzłów na dowolnej ścieżce od korzenia do liścia jest taka sama. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 18 / 52

Inne rodzaje drzew zbalasowanych II 15 7 30 4 13 25 34 2 NIL NIL 27 Rysunek: Drzewo AVL Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 19 / 52

Inne rodzaje drzew zbalasowanych III 11 2 14 1 7 NIL 15 5 8 Rysunek: Drzewo Czerwono-Czarne Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 20 / 52

Podstawowe operacje na drzewach binarnych Przechodzenie po drzewie: metoda wszerz (BFS) metoda w głab (DFS) Wyszukanie elementu w drzewie Dodawanie nowego elementu do drzewa Usunięcie wskazanego elementu z drzewa Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 21 / 52

Algorytm przechodzenia po drzewie binarnym Cel: jednokrotne odwiedzenie każdego elementu drzewa; linearyzacja drzewa; Dane wejściowe: adres (położenie) korzenia drzewa; Uwagi: kolejność przejścia dowolna - liczba możliwych ścieżek w drzewie o n węzłach wynosi n! (permutacja); najczęściej stosowane sposoby przegladania: wszerz i w głab; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 22 / 52

Metoda przechodzenia po drzewie binarnym wszerz Przechodzenie wszerz polega na odwiedzaniu kolejno każdego węzła od najwyższego poziomu i przechodzeniu kolejno po tych poziomach od góry w dół i od lewej do prawej lub od prawej do lewej. 4 7 13 15 25 30 34 2 NIL NIL 27 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 23 / 52

Metoda przechodzenia po drzewie binarnym wszerz Przechodzenie wszerz polega na odwiedzaniu kolejno każdego węzła od najwyższego poziomu i przechodzeniu kolejno po tych poziomach od góry w dół i od lewej do prawej lub od prawej do lewej. od lewej do prawej: 15, 7, 30, 4, 13, 25, 34, 2, 27. 4 7 13 15 25 30 34 2 NIL NIL 27 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 23 / 52

Metoda przechodzenia po drzewie binarnym wszerz Przechodzenie wszerz polega na odwiedzaniu kolejno każdego węzła od najwyższego poziomu i przechodzeniu kolejno po tych poziomach od góry w dół i od lewej do prawej lub od prawej do lewej. od lewej do prawej: 15, 7, 30, 4, 13, 25, 34, 2, 27. 4 7 13 15 25 30 34 od prawej do lewej: 15, 30, 7, 34, 25, 13, 4, 27, 2. 2 NIL NIL 27 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 23 / 52

Postać węzła drzewa binarnego private s t a t i c class Node { private I n t e g e r data ; private Node l e f t ; / / adres lewego potomka private Node r i g h t ; / / adres prawgo potomka } public Node ( ) { data = null ; l e f t = null ; r i g h t = null ; } public Node ( I n t e g e r d ) { data = d ; l e f t = null ; r i g h t = null ; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 24 / 52

Metoda wszerz (BFS) BFS(Node root): 1: Queue<Node> q; 2: enqueuq(q,root); 3: while not empty(q) do 4: Node v := dequeuq(q); 5: if not empty(v.left) then 6: enqueuq(q,v.left); 7: end if 8: if not empty(v.right) then 9: enqueuq(q,v.right); 10: end if 11: print(v.data); 12: end while void broadwise ( Node lroot ) { i f ( lroot == null ) return ; Queue<Node> q = new Queue< Node > ( ) ; q. enqueue ( lroot ) ; while (! q. isempty ( ) ) { Node node = q. dequeue ( ) ; i f ( node. l e f t!= null ) q. enqueue ( node. l e f t ) ; i f ( node. r i g h t!= null ) q. enqueue ( node. r i g h t ) ; System. out. p r i n t ( node. data + " " ) ; } } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 25 / 52

Metody przechodzenia w głab, tzw. DFS Wersja inorder - LVR (porzadek symetryczny) Przejście do lewego poddrzewa (L); Odwiedzenie węzła (V); Przejście do prawego poddrzewa (R); Wersja preorder - VLR (porzadek prosty) Odwiedzenie węzła (V); Przejście do lewego poddrzewa (L); Przejście do prawego poddrzewa (R); Wersja postorder - LRV (porzadek odwrotny) Przejście do lewego poddrzewa (L); Przejście do prawego poddrzewa (R); Odwiedzenie węzła (V); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 26 / 52

DFS - przykład 15 7 30 4 13 25 34 2 NIL NIL 27 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 27 / 52

DFS - przykład 7 15 30 Inorder: 2, 4, 7, 13, 15, 25, 27, 30, 34. 4 13 25 34 2 NIL NIL 27 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 27 / 52

DFS - przykład 7 15 30 Inorder: 2, 4, 7, 13, 15, 25, 27, 30, 34. Preorder: 15, 7, 4, 2, 13, 30, 25, 27, 34. 4 13 25 34 2 NIL NIL 27 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 27 / 52

DFS - przykład 15 7 30 Inorder: 2, 4, 7, 13, 15, 25, 27, 30, 34. Preorder: 15, 7, 4, 2, 13, 30, 25, 27, 34. 4 13 25 34 Postorder: 2, 4, 13, 7, 27, 25, 34, 30, 15. 2 NIL NIL 27 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 27 / 52

DFS - przykład + + * a * + g b c * f d e Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 28 / 52

DFS - przykład + + a * + * g Inorder: a+b*c + (d*e+f)*g. b c * f d e Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 28 / 52

DFS - przykład + + a * b c * + f * g Inorder: a+b*c + (d*e+f)*g. Postorder: abc*+de*f+g*+. d e Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 28 / 52

Metoda preorder void preorder(node x) { if(x!=null) { System.out.print(x.data + " "); preorder(x.left); preorder(x.right); } } public void preorder() { System.out.println("Porządek Preorder"); System.out.println("------------------------"); preorder(this.root); System.out.println(); } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 29 / 52

Metoda inorder void inorder(node x) { if(x!=null) { inorder(x.left); System.out.print(x.data + " "); inorder(x.right); } } public void inorder() { System.out.println("Porządek inorder"); System.out.println("-------------------------"); System.out.println(); inorder(this.root); System.out.println(); } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 30 / 52

Metoda postorder void postorder(node x) { if(x!=null) { postorder(x.left); postorder(x.right); System.out.print(x.data + " "); } } public void postorder() { System.out.println("Porządek postorder"); System.out.println("------------------------"); System.out.println(); postorder(this.root); System.out.println(); } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 31 / 52

Nierekurencyjny DFS - preorder preorder(root): 1: Stack<Node> s; 2: push(s,root); 3: while not empty(s) do 4: v := pop(q); 5: print(v.data); 6: if not empty(v.left) then 7: push(q,v.left); 8: end if 9: if not empty(v.right) then 10: push(q,v.right); 11: end if 12: end while void ItPreOrder ( Node lroot ) { i f ( localroot == null ) return ; Stack <Node> s = new Stack < Node > ( ) ; s. push ( lroot ) ; while (! s. isempty ( ) ) { Node node = s. pop ( ) ; System. out. p r i n t ( node. data + " " ) ; i f ( node. r i g h t!= null ) s. push ( node. r i g h t ) ; i f ( node. l e f t!= null ) s. push ( node. l e f t ) ; } } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 32 / 52

Przykład 4 7 2 NIL 13 15 30 25 NIL 27 34 Podaj ciąg liczb zakończony 0 15 7 30 4 13 25 34 2 27 0 ------------------------- Preorder rekurencyjny ------------------------- 15 7 4 2 13 30 25 27 34 ------------------------- Preorder iteracyjny ------------------------- 15 7 4 2 13 30 25 27 34 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 33 / 52

Nierekurencyjny DFS - inorder void I t I n O r d e r ( Node localroot ) { Stack <Node> globalstack = new Stack <Node > ( ) ; while ( true ) { while ( localroot!= null ) { globalstack. push ( localroot ) ; localroot=localroot. l e f t ; } i f ( globalstack. isempty ( ) ) return ; localroot = globalstack. peek ( ) ; System. out. p r i n t ( localroot. data + " " ) ; globalstack. pop ( ) ; localroot=localroot. r i g h t ; } } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 34 / 52

Przykład 4 7 2 NIL 13 15 30 25 NIL 27 34 Podaj ciąg liczb zakończony 0 15 7 30 4 13 25 34 2 27 0 ------------------------- Inorder rekurencyjny ------------------------- 2 4 7 13 15 25 27 30 34 ------------------------- Inorder iteracyjny ------------------------- 2 4 7 13 15 25 27 30 34 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 35 / 52

Nierekurencyjny DFS - postorder I private static class BSTNode { private Integer data; private boolean visit; private BSTNode left; // adres lewego potomka private BSTNode right;//adres prawgo potomka public BSTNode() { data = null; left = null; right = null; visit = false; } } void ItPostOrder(BSTNode localroot) { Stack<BSTNode> globalstack = new Stack<BSTNode>(); BSTNode v; while(!(globalstack.isempty()) (localroot!=null)){ while(localroot!=null){ v = localroot; v.visit = false; globalstack.push(v); localroot = localroot.left; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 36 / 52

Nierekurencyjny DFS - postorder II } } } v = globalstack.pop(); if (!(v.visit)) { v.visit = true; globalstack.push(v); localroot = v.right; } else { System.out.print(v.data + " "); localroot=null; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 37 / 52

Przykład 4 7 2 NIL 13 15 30 25 NIL 27 34 Podaj ciąg liczb zakończony 0 15 7 30 4 13 25 34 2 27 0 ------------------------- Postorder rekurencyjny ------------------------- 2 4 13 7 27 25 34 30 15 ------------------------- Postorder iteracyjny ------------------------- 2 4 13 7 27 25 34 30 15 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 38 / 52

Operacja wyszukiwania elementu w BST Cel: uzyskanie dowiazania do węzła; można je interpretować jako identyfikację węzła; Dane wejściowe: dowiazanie do korzenia drzewa; kryterium poszukiwania, np. pewien klucz; Uwagi: kolejność przeszukiwania dowolna - w skrajnym przypadku należy przejrzeć wszystkie węzły w drzewie (złożoność O(n)); stosowane rozwiazania: pętla lub rekurencja; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 39 / 52

Algorytm wyszukiwania elementu w BST Algorytm find(root, value): 1: while node! = NULL do 2: if Value == node.data then 3: return node; 4: else if Value < node.data then 5: node = node.left; 6: else if Value > node.data then 7: node = node.right; 8: end if 9: end while 10: return NULL; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 40 / 52

Algorytm wyszukiwania elementu w BST - przykład poszukiwanie klucza 3 Korzeń 6, Klucz < 6, Idź na lewo, Wierzchołek 2, Klucz > 2, Idź na prawo, Wierzchołek 4, Klucz < 4, Idź na lewo, Wierzchołek 3, Klucz == 3. Stop Czasy operacji: Porównanie: O(1) Poszukiwanie klucza: O(głębokość), jeśli klucz jest O(wysokość drzewa), jeśli klucza nie ma Złożoność czasowa: O(wysokość drzewa) 2 1 4 6 3 NIL 8 7 NIL Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 41 / 52

BST - wyszukiwanie elementu maksymalnego i minimalnego Jeżeli chcemy znaleźć element minimalny (maksymalny) w drzewie to poruszamy się maksymalnie w lewo (prawo). 15 7 30 4 13 25 34 2 NIL NIL 27 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 42 / 52

BST - wyszukiwanie elementu maksymalnego i minimalnego Jeżeli chcemy znaleźć element minimalny (maksymalny) w drzewie to poruszamy się maksymalnie w lewo (prawo). Na rysunku obok niebieska droga to poszukiwanie minimum, czerwona - maksimum. 7 15 30 4 13 25 34 2 NIL NIL 27 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 42 / 52

BST - wyszukiwanie elementu maksymalnego i minimalnego Jeżeli chcemy znaleźć element minimalny (maksymalny) w drzewie to poruszamy się maksymalnie w lewo (prawo). Na rysunku obok niebieska droga to poszukiwanie minimum, czerwona - maksimum. Specyficzne rozmieszczenie elementów w drzewie sprawia, że element minimalny znajduje się zawsze w najbardziej wysuniętym na lewo węźle, a element maksymalny w najbardziej wysuniętym na prawo węźle drzewa. 4 7 2 NIL 13 15 25 30 NIL 27 34 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 42 / 52

Wstawienie nowego elementu do BST Cel: dodanie nowego elementu do drzewa; Dane wejściowe: Dowiazanie do korzenia drzewa; Nowe dane elementarne; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 43 / 52

Wstawienie nowego elementu do BST - idea Utwórz element i ustal dane elementarne; Znajdź miejsce wstawienia elementu w drzewie: Aby znaleźć miejsce na nowy element w drzewie BST, to poczawszy od korzenia należy porównywać nowy element z węzłem i jeżeli jest on mniejszy od wartości przechowywanej w tym węźle to poruszać się w lewo po drzewie, w przeciwnym wypadku poruszać się w prawo. Wędrujemy tak długo, aż dojdziemy do miejsca, w którym napotkany wskaźnik do potomka w węźle będzie wskazywał na NULL. Wstaw nowy węzeł w wskazane miejsce, a wspomniany wyżej wskaźnik ustaw tak, aby wskazywał na nowy węzeł. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 44 / 52

Wstawienie nowego elementu do BST - idea Wierzchołek 6, Klucz < 6, Idź na lewo, Wierzchołek 2, Klucz > 2, Idź na prawo, Wierzchołek 4, Klucz > 4, Idź prawo, NULL, Wstaw 5. Złożoność czasowa: O(wysokość drzewa) 2 1 4 6 3 5 8 7 NIL Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 45 / 52

Wstawienie nowego elementu do BST - algorytm I public void insert(integer data) { BSTNode newnode = new BSTNode(data); newnode.left = null; newnode.right = null; count++; if (root == null) root = newnode; else { BSTNode curr = root; // zaczynamy poszukiwania od korzenia BSTNode parent; while(true) { parent = curr; if (data < curr.data) { curr = curr.left; if (curr == null) { Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 46 / 52

Wstawienie nowego elementu do BST - algorytm II parent.left = newnode; } } else { curr = curr.right; if (curr == null) { parent.right = newnode; }//if } // else } // while } // else } // insert return; return; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 47 / 52

Usuwanie danego elementu do BST - idea Cel: Usunięcie węzła z drzewa; Dane wejściowe: Dowiazanie do korzenia drzewa Root ; Opis elementu usuwanego, np. wartość danej elementarnej; Uwagi: Przypadek 1: węzeł jest liściem; Przypadek 2: węzeł ma jednego potomka; Przypadek 3: węzeł ma dwóch potomków; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 48 / 52

Przypadek 1: węzeł jest liściem; Usuwany węzeł nie ma potomstwa, np. węzeł 5. Jest to najprostsza sytuacja. Należy usunać ten element (zwolnić pamieć) i zadbać o to, aby jego rodzic wskazywał na NULL. Złożoność czasowa: O(wysokość drzewa) 2 1 4 6 3 5 8 7 NIL Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 49 / 52

Przypadek 2: węzeł ma jednego potomka; Usuwany węzeł posiada jednego potomka, np. 8 Należy tutaj zadbać (oprócz zwolnienia pamięci) o to, aby rodzic usuwanego elementu wskazywał teraz zamiast na usuwany element, na jego potomka. Złożoność czasowa: O(wysokość drzewa) 2 1 4 6 3 5 8 7 NIL Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 50 / 52

Przypadek 3: węzeł ma dwóch potomków; Aby usunać taki węzeł posiadajacy dwóch potomków, należy zamienić wartość z tego węzła z wartościa minimalna w prawym poddrzewie usuwanego węzła lub z wartościa maksymalna w lewym poddrzewie. Następnie, usuwamy element minimalny w prawym poddrzewie, ewentualnie maksymalny w lewym poddrzewie. Po takiej zamianie element minimalny (maksymalny) nie będzie miał potomstwa lub co najwyżej będzie miał jedynie prawego (lewego) syna. Złożoność czasowa: O(wysokość drzewa) Usuwany węzeł: 6 2 1 4 6 3 5 8 7 NIL Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 51 / 52

Usuwany węzeł: 6 Usuwany węzeł: 6 6 2 8 1 4 7 NIL 3 5 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 52 / 52

Usuwany węzeł: 6 Usuwany węzeł: 6 6 Najpierw szukamy elementu maksymalnego w lewym poddrzewie. Jest nim 5. 6 2 8 2 8 1 4 7 NIL 1 4 7 NIL 3 5 3 5 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 52 / 52

Usuwany węzeł: 6 Następnie zamieniamy usuwany element (6) ze znalezionym. elementem maksymalnym w lewym poddrzewie (5). 6->5 2 8 1 4 7 NIL 3 5->6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 53 / 52

Usuwany węzeł: 6 Następnie zamieniamy usuwany element (6) ze znalezionym. elementem maksymalnym w lewym poddrzewie (5). 6->5 Usuwamy węzeł, który zawierał element maksymalny (5) w lewym poddrzewie. Teraz węzeł ten zawiera wartość 6. 5 2 8 2 8 1 4 7 NIL 1 4 7 NIL 3 5->6 3 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 53 / 52