υαδικό έντρο Αναζήτησης (BSTree)



Σχετικά έγγραφα
5 ΔΕΝΤΡΑ (Trees) Σχήµα 5.1 : ενδροειδής αναπαράσταση αρχείων στα Windows. έντρα. \ {root directory} Accessories. Program Files.

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΕΝΤΡΑ (TREES) B C D E F G H I J K L M

1 Εισαγωγή στις οµές εδοµένων 2. 2 Στοίβα (Stack) 4. 3 Ουρά (Queue) 7. 4 Λίστα (List) 9. 5 Συνδεδεµένη Λίστα (Linked List) 14

ΔυαδικάΔΕΝΔΡΑΑναζήτησης

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 ( και ) Ε. Μαρκάκης Επίκουρος Καθηγητής

Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΠΛΗ111. Ανοιξη Μάθηµα 7 ο. έντρο. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

1 Εισαγωγή στις οµές εδοµένων 2. 2 Στοίβα (Stack) 4. 3 Ουρά (Queue) 7. 4 Λίστα (List) 9. 5 Συνδεδεµένη Λίστα (Linked List) 14

1 Εισαγωγή στις οµές εδοµένων 2. 2 Στοίβα (Stack) 4. 3 Ουρά (Queue) 7. 4 Λίστα (List) 9. 5 Συνδεδεµένη Λίστα (Linked List) 14

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :

Διδάσκων: Κωνσταντίνος Κώστα

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

Συγκρίσιμα Αντικείμενα (comparable)

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Διάλεξη 11: Δέντρα Ι Εισαγωγή σε Δενδρικές Δομές Δεδομένων

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research

Δομές Δεδομένων & Αλγόριθμοι

Διάλεξη 11: Δέντρα Ι - Εισαγωγή σε Δενδρικές Δομές Δεδομένων

έντρα ιδάσκοντες:. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

ιαφάνειες παρουσίασης #10 (β)

Διδάσκων: Παναγιώτης Ανδρέου

Κεφάλαιο 10 Ψηφιακά Λεξικά

ιδάσκοντες: Φ. Αφράτη,. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

Προγραμματισμός Ι (ΗΥ120)

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Κύρια σηµεία για µελέτη. έντρα. Ορολογία δέντρων. Τι είναι δέντρο

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Βασικές Έννοιες Δοµών Δεδοµένων

οµές εδοµένων 3 ο Εξάµηνο ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

Δομές Δεδομένων (Data Structures)

Γράφηµα (Graph) Εργαστήριο 10. Εισαγωγή

Ισοζυγισµένο έντρο (AVL Tree)

Στοιχεία Θεωρίας Γραφηµάτων (4) - έντρα

Δομές Δεδομένων και Αλγόριθμοι

Οντοκεντρικός Προγραμματισμός

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

AVL-trees C++ implementation

Μάθημα 22: Δυαδικά δέντρα (Binary Trees)

υαδικά έντρα Αναζήτησης

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

ένδρα (tail, head) Γονέας Παιδί (ancestor, descendant) Φύλλο Εσωτερικός Κόµβος (leaf, non-leaf) που αποτελεί το γονέα του v.

Μονοπάτια και Κυκλώµατα Euler. Στοιχεία Θεωρίας Γραφηµάτων (3,4) Παραδείγµατα. Κριτήρια Υπαρξης.

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Βασικές Έννοιες Θεωρίας Γραφημάτων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ ΠΡΩΤΗ ΠΡΟΟΔΟΣ ΣΤΗΝ «ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Y»

ένδρα u o Κόµβοι (nodes) o Ακµές (edges) o Ουρά και κεφαλή ακµής (tail, head) o Γονέας Παιδί Αδελφικός κόµβος (parent, child, sibling) o Μονοπάτι (pat

υαδικά δέντρα αναζήτησης

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 3: Δένδρα

Δομές Δεδομένων. Ενότητα 9: Τα ΔΔΑ ως Αναδρομικές Δομές Δεδομένων-Εφαρμογή Δυαδικών Δέντρων: Κωδικοί Huffman. Καθηγήτρια Μαρία Σατρατζέμη

ιαφάνειες παρουσίασης #11

έντρα Πολλαπλής ιακλάδωσης και (a, b)- έντρα

2.1 Αντικειµενοστρεφής προγραµµατισµός

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

Ουρές προτεραιότητας

ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ. ΗΥ240 - Παναγιώτα Φατούρου 1

Δομές Δεδομένων Ενότητα 5

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

ΠΛΗ 20, 6 η ΟΣΣ: Δέντρα Εξετάσεις

Γέφυρες σε Δίκτυα. Μας δίνεται ένα δίκτυο (κατευθυνόμενο γράφημα) αφετηριακός κόμβος. Γέφυρα του (με αφετηρία τον ) :

Αλγόριθµοι και Πολυπλοκότητα

Συλλογές, Στοίβες και Ουρές

ΗΥ360 Αρχεία και Βάσεις εδοµένων

ΑΝΩΤΑΤΟ ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΛΑΜΑΤΑΣ ΠΑΡΑΡΤΗΜΑ ΣΠΑΡΤΗΣ ΤΜΗΜΑ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

8.6 Κλάσεις και αντικείμενα 8.7 Δείκτες σε γλώσσα μηχανής

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

Το ισχυρό πλεονέκτηµα των απλών µη ταξινοµηµένων πινάκων που είναι η γρήγορη εισαγωγή, αναιρείται αν απαγορεύονται τα διπλότυπα.

Διάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

Διασυνδεδεμένες Δομές. Λίστες. Προγραμματισμός II 1

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Αφηρημένες Δομές Δεδομένων. Στοίβα (Stack) Υλοποίηση στοίβας

public class ArrayStack implements Stack {

Βασικές Έννοιες Θεωρίας Γραφημάτων

Διάλεξη 14: Δέντρα IV B Δένδρα. Διδάσκων: Παναγιώτης Ανδρέου

Βασικές Δοµές Δεδοµένων. Σύντοµη επανάληψη (ΕΠΛ 035).

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

διεύθυνση πρώτου στοιχείου διεύθυνση i-οστού στοιχείου T t[n]; &t[0] είναι t &t[i] είναι t + i*sizeof(t)

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

Ουρά Προτεραιότητας (priority queue)

2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Transcript:

Εργαστήριο 6 υαδικό έντρο Αναζήτησης (BSTree) Εισαγωγή Οι περισσότερες δοµές δεδοµένων, που εξετάσαµε µέχρι τώρα (λίστες, στοίβες, ουρές) ήταν γραµ- µικές (ή δοµές δεδοµένων µιας διάστασης). Στην παράγραφο αυτή ϑα ασχοληθούµε µε τις µηγραµµικές δοµές δεδοµένων, που ονοµάζονται δέντρα. Συναντάµε τα δέντρα σε πάρα πολλές εφαρ- µογές της επιστήµης των υπολογιστών. Κλασσικό παράδειγµα αποτελεί η οργάνωση του συστήµατος των αρχείων, µε τη µορφή δέντρου, που ακολουθούν τα περισσότερα λειτουργικά συστήµατα (π.χ. DOS, UNIX, σχήµα 6.1). Τα δέντρα χρησιµοποιούνται επίσης πολύ συχνά, σαν µοντέλα αναπαράστασης προβληµάτων της καθηµερινής µας Ϲωής. Χαρακτηριστικά παραδείγµατα αποτελούν το γενεαλογικό δέντρο και η δενδροειδής αναπαράσταση αγώνων κυπέλου, µεταξύ οµάδων (σχήµα 6.2). \ {root directory Accessories Program Files MSoffice2000 Autoexec.bat Chkdsk.exe NetMeeting Windows Command.com JavaFiles Readme.txt Programs Program1.java Program2.java Σχήµα 6.1: ενδροειδής αναπαράσταση αρχείων στα Windows Παρά το γεγονός ότι η έννοια του δέντρου γίνεται έµµεσα κατανοητή από έναν οποιονδήποτε οπτικό τρόπο αναπαράστασης του, η δοµή δεδοµένων δέντρο πρέπει να οριστεί µε έναν αυστηρά µαθηµατικό τρόπο. Υπάρχουν πολλοί ισοδύναµοι ορισµοί ενός δέντρου, δίνουµε στη συνέχεια δύο από αυτούς. Ορισµός 6.1. έντρο (tree) είναι ένα σύνολο Τ από κόµβους (nodes), τέτοιο ώστε είτε: Το Τ είναι κενό ή Το Τ περιλαµβάνει ένα ξεχωριστό κόµβο, R, που ονοµάζεται ϱίζα (root ) του Τ και οι υπόλοιποι κόµβοι Τ - {R χωρίζονται σε µηδέν ή περισσότερα σύνολα κόµβων, T 1, T 2,..., T n, που είναι 17

ÁÑÇÓ ÏËÕÌÐÉÁÊÏÓ ÐÁÏÊ ÏÖÇ ÁÑÇÓ ÏÖÇ ÁÑÇÓ ÇÑÁÊËÇÓ ÐÁÏ ÄÏÎÁ AEK ÐÁÏ AEK AEK ÊÕÐÅËÏÕ ÏÓ Σχήµα 6.2: Αναπαράσταση αγώνων κυπέλου µε µορφή δέντρου ξένα µεταξύ τους και τα οποία είναι µε τη σειρά τους δέντρα. Τα T 1, T 2,..., T n, ονοµάζονται υπο-δέντρα του Τ. Ορισµός 6.2. έντρο είναι µία συλλογή από στοιχεία, που ονοµάζονται κόµβοι. Οι κόµβοι του δέντρου συνδέονται µεταξύ τους µε τη ϐοήθεια ακµών (arcs) µε ϐάση τους εξής κανόνες: Υπάρχει ένας και µόνον ένας κόµβος (ϱίζα - root) στον οποίο δεν καταλήγει καµία ακµή Σε όλους τους υπόλοιπους κόµβους καταλήγει υποχρεωτικά µία και µόνο µία ακµή. Ο πρώτος ορισµός είναι αναδροµικός και είναι καλό να τον έχει κανείς υπ όψη του, όταν ϑα συζητήσουµε αργότερα, τις διάφορες ιδιότητες και τους αλγόριθµους επεξεργασίας των δέντρων. Ο δεύτερος ορισµός ϐρίσκεται σε µεγαλύτερη αντιστοιχία µε τον οπτικό τρόπο αναπαράστασης ενός δέντρου. Ας εξετάσουµε τους δύο ορισµούς χρησιµοποιώντας για παράδειγµα το δέντρο του σχήµατος 6.3. Σύµφωνα µε τον δεύτερο ορισµό ϐλέπουµε ότι µόνο στον κόµβο A, που αποτελεί τη ϱίζα του δέντρου δεν καταλήγει καµία ακµή, ενώ σε όλους τους άλλους κόµβους καταλήγει µία µόνο ακµή. Παρατηρήστε ότι συνήθως σχεδιάζουµε ένα δέντρο µε τη ϱίζα του επάνω και τους υπόλοιπους κόµβους από κάτω (παρόλο που αυτό µοιάζει παράξενο!). Σύµφωνα µε τον πρώτο ορισµό το δέντρο αποτελείται από ένα σύνολο 13 κόµβων : A B C D E F G H I J K L M Σχήµα 6.3: Συνήθης οπτική αναπαράσταση δέντρου 18

T = {A, B,C, D,E, F,G, H,I,J,K, L,M Η ϱίζα του είναι A και το σύνολο T {A χωρίζεται σε τρία υπο-δέντρα : T 1 = {B,E, F, G, T 2 = {C, H, I και T 3 = {D, J,K,L, M Τα T 1, T 2 και T 3 έχουν σαν ϱίζα τον κόµβο B, C, και D αντίστοιχα. Τα σύνολα T 1 {B, T 2 {C και T 3 {D χωρίζονται αντίστοιχα στα υπο-δέντρα : T 1.1 = {E, T 1.2 = {F, T 1.3 = {G T 2.1 = {H, T 2.2 = {I T 3.1 = {J, T 3.2 = {K, T 3.3 = {L, T 3.4 = {M Κάθε ένα από τα τελευταία υπο-δέντρα είναι σύνολα που περιέχουν έναν µόνον κόµβο. Ο κόµβος αυτός αποτελεί και τη ϱίζα του αντίστοιχου υπο-δέντρου και αν αφαιρεθεί το σύνολο που προκύπτει είναι το κενό (περίπτωση (α) του ορισµού). Μερικοί ακόµα ορισµοί-ιδιότητες των δέντρων είναι απαραίτητοι : Κάθε κόµβος (εκτός από τη ϱίζα) έχει ακριβώς έναν κόµβο από πάνω του, ο οποίος ονοµάζεται πατέρας (father). Για παράδειγµα στο δέντρο του παραπάνω σχήµατος, ο A είναι ο πατέρας του B και ο D είναι ο πατέρας του K. Οι κόµβοι που ϐρίσκονται ακριβώς κάτω από έναν κόµβο (συνδέονται µε ακµές που ξεκινούν από αυτόν), ονοµάζονται παιδιά του (children). Πολλές ϕορές µπορεί να αναφερόµαστε (κατ αναλογία µε τα γενεαλογικά δέντρα) στους απογόνους (successors) ή προγόνους (ancestors) ενός κόµβου. Στο παράδειγµα του παραπάνω σχήµατος, οι κόµβοι E, F, G είναι παιδιά του κόµβου B. Οι κόµβοι H και I είναι απόγονοι του A (όχι οι µοναδικοί) και ο κόµβος G έχει πρόγονο τον Α. Ενας κόµβος ο οποίος δεν έχει κανένα µη-κενό υπό-δέντρο (κόµβος χωρίς παιδιά) ονοµάζεται τερµατικός (terminal) κόµβος ή ϕύλλο (leaf ) του δέντρου. Στο δέντρο του σχήµατος 6.3, τερ- µατικοί κόµβοι είναι οι E, F,G, H,I,J,K, L και M. Ολοι οι υπόλοιποι κόµβοι του δέντρου ονοµάζονται µη-τερµατικοί (non-terminals). Πολλές ϕορές οι τερµατικοί κόµβοι ενός δέντρου αναφέρονται και σαν εξωτερικοί (externals) ενώ οι µη τερµατικοί σαν εσωτερικοί (internals). Μια ακολουθία κόµβων, ενός δέντρου, οι οποίοι συνδέονται διαδοχικά µεταξύ τους µε τη ϐοή- ϑεια ακµών, ονοµάζεται µονοπάτι (path). Οι ακολουθίες < A, B,G > και < A, D,K > είναι δύο από τα µονοπάτια του δέντρου του σχήµατος 6.3. Οι κόµβοι ενός δέντρου χωρίζονται σε επίπεδα ( levels). Ενας κόµβος ϐρίσκεται στο επίπεδο N, εάν N είναι ο αριθµός των ακµών του µονοπατιού, που συνδέει τη ϱίζα µε τον κόµβο αυτό. Στο παράδειγµα του σχήµατος 6.3, ο A ανήκει στο επίπεδο 0, οι B,C, D ανήκουν στο επίπεδο 1, ενώ οι κόµβοι E, F, G, H, I,J,K, L,M αποτελούν το επίπεδο 2. Ορίζουµε σαν ύψος (heigth) ή ϐάθος (depth) ενός κόµβου τον αριθµό του επιπέδου στο οποίο ϐρίσκεται ο κόµβος αυτός. Το ύψος (ή ϐάθος) ενός δέντρου ταυτίζεται µε το µέγιστο ύψος (ή ϐάθος) των κόµβων του δέντρου. Ονοµάζουµε ϐαθµό ( degree) ενός κόµβου τον αριθµό των υπό-δέντρων του Ονοµάζουµε δάσος (forest) ένα σύνολο από N (N 0) δέντρα, που είναι ξένα µεταξύ τους. 19

D B F A C G E Σχήµα 6.4: υαδικό δέντρο υαδικά δέντρα Ορισµός 6.3. υαδικό δέντρο (binary tree) είναι ένα δέντρο του οποίου κάθε κόµβος έχει το πολύ δύο υπο-δέντρα. Τα υπο-δέντρα του δυαδικού δέντρου ονοµάζονται αριστερό και δεξιό υπο-δέντρο αντίστοιχα (σχήµα 6.4). Κατασκευή υαδικού έντρου µε τη ϐοήθεια δεικτών Μπορούµε να αναπαραστήσουµε ένα δυαδικό δέντρο µε τη ϐοήθεια µιας δυναµικής δοµής δεδοµένων. Κάθε κόµβος του δέντρου αναπαρίσταται µε τη ϐοήθεια µιας τριάδας η οποία περιλαµβάνει ένα πεδίο για την αποθήκευση της πληροφορίας του κόµβου και δύο πεδία τύπου δείκτη σε κόµβο δέντρου, που δείχνουν στο αριστερό και δεξιό υπο-δέντρο αντίστοιχα. Η τριάδα αυτή των δηλώσεων ορίζονται σαν µέλη της κλάσης TreeNode. ίνεται επίσης στα πλαίσια της κλάσης η πράξη δηµιουργίας ενός τερµατικού κόµβου : TreeNode.java public class TreeNode { public TreeNode (Comparable obj ) {... public Comparable getnodedata ( ) {... public TreeNode getleftnode ( ) {... public TreeNode getrightnode ( ) {... public boolean isleaf ( ) {... public void setleftnode ( TreeNode node) {... public void setrightnode ( TreeNode node) {... // Instance fields private TreeNode l e f t ; private TreeNode right ; private Comparable item ; 20

Root Root.left D Root.right B F A C null G null null E null null null null null Σχήµα 6.5: υαδικό δέντρο Για να αναφερθούµε σε ένα δυαδικό δέντρο χρησιµοποιούµε ένα δείκτη ( pointer), ο οποίος δείχνει στην ϱίζα του. Ο δείκτης αυτός (root) ορίζεται στα πλαίσια της κλάσης που υλοποιεί το δέντρο αυτό Η χρήση δυναµικής δοµής δεδοµένων είναι τις περισσότερες ϕορές η πιο κατάλληλη για την αναπαράσταση ενός δυαδικού δέντρου και είναι αυτή που ϑα χρησιµοποιήσουµε για την υλοποίηση των διαφόρων πράξεων-λειτουργιών που ορίζονται πάνω στα δυαδικά δέντρα. Στο σχήµα 6.5 ϕαίνεται η γραφική αναπαράσταση του δέντρου του σχήµατος 6.4 µε τη ϐοήθεια δεικτών. Παρατηρήστε ότι στην περίπτωση που το αριστερό ή το δεξιό υπο-δέντρο ενός κόµβου είναι κενό τότε η αντίστοιχη τιµή του δείκτη left ή right έχει την τιµή null. Κατασκευή υαδικού έντρου Αναζήτησης Το δυαδικό δέντρο αναζήτησης αποτελεί µία ειδική κατηγορία δυαδικού δέντρου, το οποίο κατασκευάζεται µε ϐάση τον παρακάτω αλγόριθµο. Το πρώτο δεδοµένο χρησιµοποιείται για τη δηµιουργία της ϱίζας του δέντρου. Τα επόµενα δεδοµένα τοποθετούνται στο δέντρο, έτσι ώστε σε σχέση µε οποιονδήποτε κόµβο να ισχύει το εξής : όλες οι τιµές που ϐρίσκονται στο αριστερό υπο-δέντρο είναι µικρότερες από την τιµή του κόµβου και όλες οι τιµές που ϐρίσκονται στο δεξιό υπο-δέντρο είναι µεγαλύτερες. Ασκηση 6.1 Για να κατασκευάσετε ένα δυαδικό δέντρο αναζήτησης πρέπει να δηµιουργήσετε τις παρακάτω κλάσεις : TreeNode class η οποία περιγράφει ένα κόµβο ενός δυναµικού BSTree. DBSTree class που υλοποιεί το BSTree interface 21

BSTree.java public interface BSTree extends DataStructure { / <p> Adds a new item into the tree </p> / public void add( Comparable item ) throws StructureFullException ; / <p> Removes an item from the tree </p> / public void remove ( Comparable item ) throws StructureEmptyException ; Ασκηση 6.2 Στη συνέχεια να προσθέσετε στην DBSTree class τον παρακάτω κώδικα που εκτελεί τις 3 διελεύσεις δέντρου (inorder, preorder, postorder) που αναφέρονται στην ϑεωρία. DBSTree.java //....... public void inordertraversal ( ) { System. out. println ( "INORDER TRAVERSAL" ) ; inorder ( 0 ) ; System. out. println ( ) ; public void preordertraversal ( ) { System. out. println ( "PREORDER TRAVERSAL" ) ; preorder ( 0 ) ; System. out. println ( ) ; public void postordertraversal ( ) { System. out. println ( "POSTORDER TRAVERSAL" ) ; postorder ( 0 ) ; System. out. println ( ) ; // Recursive inorder private void inorder ( int position ) {... 22

// Recursive preorder private void preorder ( int position ) {... // Recursive postorder private void postorder ( int position ) {... Ασκηση 6.3 Να γράψετε την κλάση BSTreeManagement class που ελέγχει την ορθότητα των διελεύσεων που κατασκευάσατε στην προηγούµενη άσκηση : BSTreeManagement.java public class BSTreeManagement { public static void main( String args [ ] ) { DBSTree tree = new DBSTree ( ) ; int matrix [ ] = {42,12,19,50,17,10,69,54,43,8; for ( int i =0; i <matrix. length ; i ++) tree.add( matrix [ i ] ) ; System. out. println ( tree ) ; tree. inordertraversal ( ) ; tree. preordertraversal ( ) ; tree. postordertraversal ( ) ; Ασκηση 6.4 Με ϐάση το BSTree interface, που περιγράφει τη λειτουργία ενός δυαδικού δέντρου αναζήτησης, να κατασκευάσετε την ArrayBSTree class µε χρήση πίνακα. Στη συνέχεια να προσθέσετε στην ArrayBSTree class τις 3 διελεύσεις δέντρου (inorder, preorder, postorder) που αναφέρονται στην ϑεωρία. Τέλος να εκτελέσετε την BSTreeManagement class που ελέγχει την ορθότητα των διελεύσεων που κατασκευάσατε. 23