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

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

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

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

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

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

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

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

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

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 18: B-Δένδρα

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

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

Διάλεξη 14: Δέντρα IV - B-Δένδρα

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

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Κεφάλαιο 7 Λεξικά και Δυαδικά Δένδρα Αναζήτησης

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

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

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

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

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

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

Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε:

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

ΟιβασικέςπράξειςπουορίζουντονΑΤΔ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

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

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

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

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

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

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

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

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

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

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

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη

Οι βασικές πράξεις που ορίζουν τον ΑΤ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

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

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

AVL-trees C++ implementation

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 8-1

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

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

Ενότητα 7 Ουρές Προτεραιότητας

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

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

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

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

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

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ

Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Διάλεξη 15: Αναδρομή (Recursion)

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

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

Κεφάλαιο 6 Ουρές Προτεραιότητας

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 3 Δέντρα

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

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

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

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 7η: Ουρές Προτεραιότητας Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Δοµές Δεδοµένων. 14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης. Ε. Μαρκάκης

Transcript:

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης (ΔΔΑ) Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου Εισαγωγή στοιχείου Διαγραφή Μικρότερου και Τυχαίου στοιχείου Σύγκριση 2 ΔΔΑ, Διάσχιση ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1

Δυαδικά Δένδρα Ένα δένδρο είναι δυαδικό αν όλοι οι κόμβοι του έχουν βαθμό 2. Ορισμός: Δυαδικό δένδρο λέγεται ένα δένδρο το οποίο : είτε είναι κενό, ή αποτελείται από μια ρίζα και δύο δυαδικά υπόδενδρα. Αναφερόμαστε στα δύο υποδένδρα ως το αριστερό και το δεξιό υπόδενδρο. Το ύψος ενός δυαδικού δένδρου με n κόμβους μπορεί να είναι το πολύ : n 1(συνδεδεμένη λίστα) και το λιγότερο lg n. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 2

Δυαδικά Δένδρα (συν.) Ένα δυαδικό δένδρο είναι γεμάτο (full), αν κάθε εσωτερικός του κόμβος έχει δύο απογόνους. 6 1 3 11 2 5 8 13 7 9 FULL Ένα δυαδικό δένδρο είναι τέλειο (perfect), αν είναι γεμάτο και όλα τα φύλλα έχουν το ίδιο βάθος. 6 1 3 11 2 5 8 13 PERFECT ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 3

Δυαδικά Δένδρα (συν.) Ένα δυαδικό δένδρο είναι πλήρες (complete) αν Αναδρομικός Ορισμός 1. έχει ύψος 0 και ένα κόμβο, 2. έχει ύψος 1 και η ρίζα του έχει είτε δύο παιδιά είτε ένα αριστερό παιδί. 3. έχει ύψος h και η ρίζα του έχει ένα τέλειο αριστερό υπόδενδρο ύψους h 1 και ένα πλήρες δεξιό υπόδενδρο ύψους h 1, ή ένα πλήρες αριστερό υπόδενδρο ύψους h 1 και ένα τέλειο δεξιό υπόδενδρο ύψους h 2. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4

Παραδείγματα Δυαδικά Δένδρα ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5

Θεώρημα 1. Ένα γεμάτο δυαδικό (μη άδειο) δένδρο με n εσωτερικούς κόμβους, έχει n+1 φύλλα. 2. Κάθε δυαδικό δένδρο με n κόμβους έχει n+1 null δείκτες Απόδειξη (2) με τη μέθοδο της μαθηματικής επαγωγής: Βάση της επαγωγής: n = 0 To δένδρο αποτελείται από ένα NULL δείκτη και το ζητούμενο έπεται. Υπόθεση της επαγωγής: Έστω ότι κάθε δυαδικό δένδρο με k κόμβους, k < m, έχει k+1 NULL δείκτες. Βήμα της επαγωγής: Έστω δυαδικό δένδρο με m κόμβους. Θέλουμε να δείξουμε πως περιέχει m+1 NULL δείκτες. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 6

Θεώρημα Ένα οποιοδήποτε δυαδικό δένδρο έχει την πιο κάτω μορφή: m 1 + m 2 + 1 = m m 1 κόμβοι m 2 κόμβοι Ο αριθμός NULL δεικτών του δένδρου είναι = ο αριθμός NULL δεικτών του αριστερού υποδένδρου + ο αριθμός NULL δεικτών του δεξιού υποδένδρου = {από την υπόθεση της επαγωγής και αφού m 1, m 2 < m (m 1 +1) + (m 2 + 1) = (m 1 + m 2 +1 ) + 1 = m + 1 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 7

Αναπαράσταση Δένδρων στη Μνήμη Αφού κάθε κόμβος σε ένα δυαδικό δένδρο έχει το πολύ δύο παιδιά, μπορούμε να κρατούμε δείκτες στο καθένα από αυτά. Δηλαδή, ένας κόμβος μπορεί να υλοποιηθεί ως μια εγγραφή TreeNode με τρία πεδία (παρόμοια με κόμβο διπλά συνδεδεμένης λίστας). 1. key, όπου αποθηκεύουμε τo κλειδί του κόμβου, 2. left, τύπου pointer, ο οποίος δείχνει το αριστερό, υπόδενδρο που ριζώνει στον συγκεκριμένο κόμβο, και 3. right, τύπου pointer, ο οποίος δείχνει το δεξιό υπόδενδρο που ριζώνει στον συγκεκριμένο κόμβο. 4.... διάφορα άλλα χρήσιμα στοιχεία private class TreeNode<E> { E key; BinaryTreeNode<E> left; BinaryTreeNode<E> right; //other useful fields boolean isleaf, isinternal, isroot; Object data; // data BinaryTreeNode(E key){ this.key = key; this.left = null; this.right = null; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 8

Αναπαράσταση Δένδρων στη Μνήμη (συν.) Έτσι, ένα δυαδικό δένδρο υλοποιείται ως ένα δείκτης προς τη ρίζα του δένδρου, δηλαδή μία αναφορά σε εγγραφή τύπου TreeNode. Επίσης μπορεί να υλοποιηθεί σαν μία ξεχωριστή δομή Tree η οποία να περιλαμβάνει και πληροφορίες όπως μέγεθος, ύψος, κ.τ.λ. Παρόμοια με Λίστες, Στοίβες, Ουρές, κτλ. public class Tree<E extends Comparable>{ private class TreeNode<E> {... private BinaryTreeNode<E> head; private int size; private int height; public void makeempty() { this.head=null; this.size=0; public boolean isempty() { return this.size==0; public int size() { return this.size; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 9

Δυαδικά Δένδρα Αναζήτησης ΔΔΑ (Binary Search Trees) Το πιο σημαντικό πλεονέκτημα της χρήσης δυαδικών δένδρων η αποδοτική αναζήτηση σε ένα σύνολο στοιχείων Υποθέτουμε την ύπαρξη μιας σχέσης στο σύνολο των στοιχείων που επεξεργαζόμαστε, έστω τη σχέση < πάνω στο σύνολο των ακεραίων. Ένα δυαδικό δένδρο αναζήτησης (ΔΔΑ) είναι ένα δυαδικό δένδρο κάθε κόμβος u του οποίου ικανοποιεί τα εξής: 1. τα κλειδιά του αριστερού υποδένδρου του u είναι μικρότερα από το κλειδί του u 2. τα κλειδιά του δεξιού υποδένδρου του u είναι μεγαλύτερα (ή ίσο) από το κλειδί του u. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 10

Παράδειγμα Κτισίματος ενός ΔΔΑ 37 37 37 37 24 24 42 24 42 37 37 6 24 42 24 42 6 40 6 40 60 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 11

Είναι αυτά ΔΔΑ; (μόνο τα κλειδιά εμφανίζονται) 50 25 75 12 45 66 90 50 25 75 12 55 73 90 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 12

Κτίζοντας ένα ΔΔΑ Δένδρο με τα ίδια στοιχεία τοποθετημένα με διαφορετική σειρά: 60, 42, 6, 24 37, 40. 6 42 24 60 37 Ποιο είναι το χειρότερο σενάριο? Οι τιμές εισόδου φθάνουν με την ακόλουθη σειρά 60,42,40,37,24,6 (φθίνουσα σειρά) ή 6,24,37,40,42,60 (αύξουσα σειρά) Αυτές οι δυο τιμές εισόδου παράγουν μια συνδεμένη λίστα 40 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 13

Διαδικασία Εύρεσης Τυχαίου Στοιχείου Απλή αναδρομική στρατηγική: συγκρίνουμε το στοιχείο που μας ενδιαφέρει α με το στοιχείο της ρίζας του δένδρου β (αν υπάρχει) και 1.αν α=β, σταματούμε, 2.αν α<β, προχωρούμε στο αριστερό υπόδενδρο, 3.αν α>β προχωρούμε στο δεξιό υπόδενδρο. Χρόνος Εκτέλεσης; Χείριστη Περίπτωση: Ο(h) όπου h το ύψος του δέντρου, O(n) αν το δέντρο είναι λίστα Μέση Περίπτωση: Θ(log 2 n) αν το δέντρο είναι ισοζυγισμένο ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 14

Διαδικασία Εύρεσης Τυχαίου Στοιχείου: Υλοποίηση public BinaryTreeNode<E> find(e key) { return this.find(key, this.head); private BinaryTreeNode<E> find(e key, BinaryTreeNode<E> node) { if(node==null){ return null; else if (key.compareto(node.key) == 0) { return node; else if (key.compareto(node.key) < 0) { return find(key, node.left); else { return find(key, node.right); ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 15

Διαδικασία Εύρεσης Ελαχίστου/Μεγίστου στοιχείου Στόχος: να επιστραφεί ο κόμβος που περιέχει το μικρότερο (μεγαλύτερο) κλειδί στο δένδρο. Αλγόριθμος: Ξεκινάμε από τη ρίζα και πηγαίνουμε αριστερά (δεξιά) όσο υπάρχει ένα αριστερό (δεξιό) παιδί. Το σημείο που σταματάμε είναι το μικρότερο (μεγαλύτερο) στοιχείο. Χρόνος Εκτέλεσης; Παρόμοια με find ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 16

Διαδικασία Εύρεσης Ελαχ./Μεγίστ.: Υλοποίηση public E findmin(){ BinaryTreeNode<E> tmp = this.findmin(this.head); if(tmp!=null) return tmp.key; return null; public BinaryTreeNode<E> findmin(binarytreenode<e> node){ if(node!=null) while(node.left!=null) node = node.left; return node; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 17

Διαδικασία Εισαγωγής Σημαντικό: παίζει ρόλο η σειρά εισαγωγής Παραδείγματα Α. Εισαγωγή 37, 24, 42, 6, 40, 60 Β. Εισαγωγή 60, 42, 6, 24, 37, 40 37 60 42 24 42 6 6 40 60 24 37 40 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 18

Διαδικασία Εισαγωγής Κόμβου Διασχίζουμε το δέντρο, όπως θα κάναμε με τη find Εάν το X βρεθεί, δεν κάνουμε καμία ενέργεια Διαφορετικά, εισάγουμε το X στο τελευταίο σημείο του μονοπατιού που διασχίστηκε Χρονική πολυπλοκότητα= O(h ύψος του δένδρου) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 19

Διαδικασία Εισαγωγής Κόμβου: Υλοποίηση public void insert(e key) { this.head = this.insert(key, this.head); this.size++; private BinaryTreeNode<E> insert(e key,binarytreenode<e> node) { if(node==null){ node = new BinaryTreeNode<E>(key); else if (key.compareto(node.key) < 0) { node.left = insert(key, node.left); else if (key.compareto(node.key) > 0) { node.right = insert(key, node.right); return node; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 20

Εξαγωγή του μικρότερου κόμβου DeleteMin() 1. Ακολουθούμε τους αριστερούς δείκτες όσο μπορούμε, φθάνοντας στον κόμβο με το μικρότερο στοιχείο, u. 2. Βρίσκουμε τον πατέρα v του u και αλλάζουμε τον αριστερό δείκτη του v ώστε να δείχνει στο δεξιό παιδί του u. v u 45 45 34 71 71 36 36 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 21

Διαδικασία Διαγραφής Στοιχείου Για να αφαιρέσουμε ένα κλειδί i από ένα ΔΔΑ: 1. Βρίσκουμε τον κόμβο u που περιέχει το i. Ας υποθέσουμε πως v είναι ο πατέρας του u. 2. Αν u είναι φύλλο, τότε αλλάζουμε τον δείκτη του v που δείχνει στο u, ώστε να γίνει null. 3. Αν ο u έχει ένα παιδί, τότε αλλάζουμε τον δείκτη του v που δείχνει τον u, ώστε να δείχνει στο παιδί του u. 4. Αν ο u έχει δύο παιδιά, αλλάζουμε το κλειδί του u ώστε να γίνει το μικρότερο από τα κλειδιά όλων των απογόνων του που έχουν κλειδιά μεγαλύτερα του i. καλούμε τη μέθοδο deletemin στο αριστερό παιδί του u. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 22

Παραδείγματα Διαγραφής Στοιχείου v 2 Διαγραφή του 1 u 1 2 3 4 5 1. Βρίσκουμε τον κόμβο u που περιέχει το i. Ας υποθέσουμε πως v είναι ο πατέρας του u. 2: μετακίνηση αριστερά 1: τέλος αναζήτησης 2. Αν u είναι φύλλο, τότε αλλάζουμε τον δείκτη του v που δείχνει στο u, ώστε να γίνει null. v.left= null 4 3 5 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 23

Παραδείγματα Διαγραφής Στοιχείου 2 Διαγραφή του 3 1 u 3 4 v 5 1. Βρίσκουμε τον κόμβο u που περιέχει το i. Ας υποθέσουμε πως v είναι ο πατέρας του u. 2: μετακίνηση δεξιά 4: μετακίνηση αριστερά 3: τέλος αναζήτησης 2 2. Αν u είναι φύλλο, τότε αλλάζουμε τον δείκτη του v που δείχνει στο u, ώστε να γίνει null. v.left= null 1 4 5 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 24

Παραδείγματα Διαγραφής Στοιχείου 2 v 1 4 u Διαγραφή του 4 1. Βρίσκουμε τον κόμβο u που περιέχει το i. Ας υποθέσουμε πως v είναι ο πατέρας του u. 2: μετακίνηση δεξιά 4: τέλος αναζήτησης 2 3 1 3 2. Αν u είναι φύλλο, τότε αλλάζουμε τον δείκτη του v που δείχνει στο u, ώστε να γίνει null. 3. Αν ο u έχει ένα παιδί, τότε αλλάζουμε τον δείκτη του v που δείχνει τον u, ώστε να δείχνει στο παιδί του u. v.right= u.left; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 25

Παραδείγματα Διαγραφής Στοιχείου 1 1 u 2 min 3 3 v 4 4 5 5 Διαγραφή του 2 1. Βρίσκουμε τον κόμβο u που περιέχει το i. Ας υποθέσουμε πως v είναι ο πατέρας του u. 2: τέλος αναζήτησης 2. Αν u είναι φύλλο, 3. Αν ο u έχει ένα παιδί, 4. Αν ο u έχει δύο παιδιά, αλλάζουμε το κλειδί του u ώστε να γίνει το μικρότερο από τα κλειδιά όλων των απογόνων του που έχουν κλειδιά μεγαλύτερα του i. καλούμε τη μέθοδο deletemin στο δεξιό παιδί του u. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 26

Διαγραφή στοιχείου με δύο απογόνους Βρίσκουμε το μικρότερο στοιχείο (min) στο δεξιό υπόδεντρο του κόμβου που θέλουμε να διαγράψουμε Αντικαθιστούμε το στοιχείο που θέλουμε να διαγράψουμε με το min και τώρα έχουμε το ίδιο στοιχείο 2 φορές στο δέντρο μας Εφαρμόζουμε την deletemin στο δεξιό υπόδεντρο ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 27

Διαγραφή στοιχείου με δύο απογόνους Θέλουμε να διαγράψουμε το 12 από το δέντρο. Έχει 2 απογόνους. Βρίσκουμε το μικρότερο στοιχείο στο δεξιό υπόδεντρο του κόμβου που θέλουμε να διαγράψουμε. Στην περίπτωση αυτή είναι το 19 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 28

Διαγραφή στοιχείου με δύο απογόνους Αντικαθιστούμε το 19 στη θέση που είναι το 12. Δεν αντικαθιστούμε τους κόμβους αλλά το περιεχόμενο. Τώρα είμαστε στη κατάσταση που έχουμε 2 κόμβους με το ίδιο στοιχείο. Εδώ καλούμε την deletemin για να διαγράψουμε το 19. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 29

Διαγραφή στοιχείου με δύο απογόνους Μια διαφορετική προσέγγιση είναι να επιλέξουμε το μεγαλύτερο στοιχείο στο αριστερό υπόδεντρο. Στην πιο πάνω περίπτωση θέλουμε να διαγράψουμε το στοιχείο 8. Επιλέγουμε να κατευθυνθούμε αριστερά και να επιλέξουμε το μεγαλύτερο στοιχείο στο αριστερό υπόδεντρο του κόμβου που θέλουμε να διαγράψουμε. Επιλέγουμε το στοιχείο 5. Αντιγράφουμε το στοιχείο αυτό στον κόμβο που θέλουμε να διαγράψουμε, και διαγράφουμε τον κόμβο που περιέχει το μεγαλύτερο στοιχείο στο αριστερό υπόδεντρο. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 30

Άσκηση Υλοποιήστε τον κώδικα διαγραφής στοιχείου σε δυαδικά δέντρα αναζήτησης ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 31

Σύγκριση Δυαδικών Δένδρων Η σύγκριση 2 ΔΔΑ επιτυγχάνεται μην διάσχιση του κάθε κόμβου αναδρομικά. Αν όλοι οι κόμβοι έχουν το ίδιο κλειδί τότε επιστρέφει true και false στην αντίθετη περίπτωση public boolean sametree(binarytree<e> t) { return this.sametree(this.head, t.head); private boolean sametree(binarytreenode<e> a, BinaryTreeNode<E> b) { // και τα δυο δένδρα είναι κενά => άρα επιστρέφουμε true if (a == null && b == null) return true; // και τα δυο δένδρα δεν είναι κενά συγκρίνουμε τις ρίζες τους else if (a!= null && b!= null) return ((a.key.compareto(b.key) == 0) && sametree(a.left, b.left) && sametree(a.right, b.right)); // το ένα εκ των δυο υπό δένδρων είναι κενό => επιστρέφουμε false else return false; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 32

Διάσχιση ΔΔΑ Αν θέλουμε να επισκεφθούμε όλους τους κόμβους ενός δένδρου, μπορούμε να χρησιμοποιήσουμε ένα από τους πιο κάτω τρόπους, οι οποίοι διαφέρουν στη σειρά με την οποία εξετάζουν τους κόμβους. 1. Προθεματική Διάσχιση: (Preorder Traversal) επισκεπτόμαστε (εκτυπώνουμε) πρώτα κάποιο κόμβο και μετά τα παιδιά του. 2. Μεταθεματική Διάσχιση: (Postorder Traversal) επισκεπτόμαστε (εκτυπώνουμε) πρώτα τα παιδιά και ύστερα τον κόμβο. 3. Ενδοθεματική Διάσχιση: (Inorder Traversal) επισκεπτόμαστε (εκτυπώνουμε) πρώτα τα αριστερά παιδιά, μετά τον κόμβο και μετά τα δεξιά παιδιά. PreOrder: 2 1 4 3 5 PostOrder: 1 3 5 4 2 InOrder: 1 2 3 4 5 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 33

Διάσχιση ΔΔΑ: Υλοποίηση public void preorder() { this.preorder(this.head); private void preorder(binarytreenode<e> node) { if (node!= null) { System.out.print(node.key + " "); preorder(node.left); preorder(node.right); public void postorder() { this.postorder(this.head); private void postorder(binarytreenode<e> node) { if (node!= null) { postorder(node.left); postorder(node.right); System.out.print(node.key + " "); public void inorder() { this.inorder(this.head); private void inorder(binarytreenode<e> node) { if (node!= null) { inorder(node.left); System.out.print(node.key + " "); inorder(node.right); ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 34

Δυαδικά Δέντρα και ΔΔΑ: Ασκήσεις Πιο θα είναι το αποτέλεσμα της προθεματικής διάσχισης? 50 42 72 5 46 61 99 43 58 65 51 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 35

Δυαδικά Δέντρα και ΔΔΑ: Ασκήσεις Πιο θα είναι το αποτέλεσμα της μεταθεματικής διάσχισης? 50 42 72 5 46 61 99 43 58 65 51 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 36

Δυαδικά Δέντρα και ΔΔΑ: Ασκήσεις Ποιο είναι το ύψος ενός δυαδικού δέντρου όταν εισάξουμε τα στοιχεία 1,2,3,4,5,6,7 με αυτή τη σειρά; Ποιος θα είναι ο χρόνος αναζήτησης χείριστης περίπτωσης στο πιο πάνω δέντρο σε σχέση με το n; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 37

Δυαδικά Δέντρα και ΔΔΑ: Ασκήσεις Με ποια σειρά πρέπει να εισάξουμε τα στοιχεία 1,2,3,4,5,6,7 ώστε να πάρουμε το πιο κάτω δέντρο; 4 2 6 1 3 5 7 Τι είναι το πιο πάνω δέντρο; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 38