Δέντρα (Trees) - Ιεραρχική Δομή

Σχετικά έγγραφα
υαδικό δέντρο έντρα (Trees) -Ιεραρχική οµή

Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 6: ΑΤΔ Δένδρο, ΑΤΔ Δυαδικό Δένδρο Αναζήτησης (ΔΔΑ)

ρίζα E F G H I J επίπεδο 1

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

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

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

ΣΤΟΙΒΕΣ (stacks) Σχήµα: Λειτουργία Στοίβας

AVL δέντρα. h L h R. G.M. Adelson_Velkii και E.M. Landis 1962

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

ΕΠΛ232: Εργαστήριο 2

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

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

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

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

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

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)

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

Χρήσεις Στοίβας ΣΤΟΙΒΑ. Ορισμός Στοίβας (stack) Βασική Λειτουργικότητα

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

ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών

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

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

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

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

Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 2: ΑΤΔ Στοίβα. Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών

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

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

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

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

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

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

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

Tύπος δεδοµένων (data type) µιας µεταβλητής (σε µια γλώσσα προγραµµατισµού) είναι το σύνολο των τιµών που µπορεί να πάρει η µεταβλητή.

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

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

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

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

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

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

Δρ. Πέτρος Παναγή B123

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

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

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

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

Αναδροµή. Σε αυτήν την (βοηθητική) ενότητα θα µελετηθούν τα εξής : Η έννοια της αναδροµής Υλοποίηση και αποδοτικότητα Αφαίρεση της αναδροµής

ΣΥΜΒΟΛΟΣΕΙΡΕΣ (Strings) Ο ΑΤΔ Συµβολοσειρά Μία συµβολοσειρά είναι µία ακολουθία χαρακτήρων. Bασικές πράξεις : 1. Δηµιουργία. 2. Μήκος. 3.

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

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

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

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

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

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

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

h/2. Άρα, n 2 h/2-1 h 2log(n+1). Πως υλοποιούµε τη LookUp()? Πολυπλοκότητα?

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

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

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

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

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

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

Μπαλτάς Αλέξανδρος 21 Απριλίου 2015

Αναδρομή (Recursion) Πώς να λύσουμε ένα πρόβλημα κάνοντας λίγη δουλειά και ανάγοντας το υπόλοιπο να λυθεί με τον ίδιο τρόπο.

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

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

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

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

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

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

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

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

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

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

Εισαγωγή ενός νέου στοιχείου. Επιλογή i-οστoύ στοιχείου : Εύρεση στοιχείου με το i-οστό μικρότερο κλειδί

Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης 24/4/2012

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

Εκτενείς Δομές Δεδομένων

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

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

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

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

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

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

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

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

Δομές δεδομένων. Ενότητα 8: Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #5

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

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

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

ΗΥ240 - Παναγιώτα Φατούρου 1

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

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

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Transcript:

Δέντρα (Trees) - Ιεραρχική Δομή Εφαρμογές Δομή Οργάνωση Αρχείων Οργανογράμματα Ορισμός (αναδρομικός ορισμός): Ένα δέντρο είναι ένα πεπερασμένο σύνολο κόμβων το οποίο είτε είναι κενό είτε μη κενό σύνολο τέτοιο ώστε: 1. Yπάρχει ένας μοναδικός κόμβος, που καλείται ρίζα. 2. Οι υπόλοιποι κόμβοι χωρίζονται σε n>=0 ξένα μεταξύ τους υποσύνολα, Τ 1, Τ 2,...,T n, κάθε ένα από τα οποία είναι ένα δέντρο. Τα Τ 1, Τ 2,...,T n καλούνται υπόδεντρα (subtrees) της ρίζας.

Ο αριθμός των υποδέντρων ενός κόμβου καλείται βαθμός του κόμβου αυτού. Ας θεωρήσουμε το δέντρο του παρακάτω Σχήματος. Το δέντρο αποτελείται από 10 κόμβους {A, B, C, D, E, F, G, H, I, J}. ρίζα Α επίπεδο 1 Β C D 2 E F G H I J 3

Νέοι Όροι βαθμός κόμβου βαθμός δέντρου τερματικοί κόμβοι (ή φύλλα) εσωτερικοί κόμβοι παιδί, πατέρας (ή γονέας) πρόγονος, απόγονος ύψος (ή βάθος)

Δυαδικό δέντρο Ενα δυαδικό δέντρο είναι ένα πεπερασμένο σύνολο κόμβων, το οποίο είτε είναι κενό ή : 1. Υπάρχει ένας ειδικός κόμβος που καλείται ρίζα, και 2. Οι υπόλοιποι κόμβοι χωρίζονται σε δύο ξένα μεταξύ τους υποσύνολα, Α και Δ, κάθε ένα από τα οποία είναι ένα δυαδικό δέντρο. Το Α είναι το αριστερό υπόδεντρο της ρίζας και το Δ είναι το δεξί υπόδεντρο της ρίζας. Κάθε δέντρο μπορεί να παρασταθεί σαν ένα δυαδικό δέντρο.

Α Β Ε C F G D H J I

Πρόταση (i) Ο μέγιστος αριθμός κόμβων στο επίπεδο i ενός δέντρου βαθμού d είναι d i-1, i >=1 και (ii) Ο μέγιστος αριθμός κόμβων ενός δέντρου βαθμού d και ύψους h είναι (d h - 1)/(d - 1). Απόδειξη (i) Η απόδειξη θα γίνει με επαγωγή. Αν i = 1, τότε d i-1 = d 0 = 1 πράγμα που ισχύει. Έστω ότι ο μέγιστος αριθμός των κόμβων στο k επίπεδο είναι d k-1. Το μέγιστο πλήθος των κόμβων στο k + 1 επίπεδο είναι d d k-1 = d k. (ii) Ο μέγιστος αριθμός των κόμβων σε ένα δέντρο ύψους h είναι: h i 1 (μέγιστος αριθμός κόμβων στο επίπεδο i) h i 1 d i 1 1 d d 2... d h 1 h d d 1 1

Πόρισμα (i) Ο μέγιστος αριθμός κόμβων στο επίπεδο i ενός δυαδικού δέντρου είναι 2 i-1, i >= 1 και (ii) Ο μέγιστος αριθμός κόμβων ενός δυαδικού δέντρου ύψους h είναι 2 h - 1. Πρόταση Ενα δυαδικό δέντρο με n κόμβους έχει ύψος τουλάχιστον Απόδειξη Αν h είναι το ύψος ενός δυαδικού δέντρου, τότε από το παραπάνω πόρισμα έχουμε 2 h - 1>= n ή h >= log 2 (n + 1). Αρα το ελάχιστο ύψος του δυαδικού δέντρου είναι log ( n 2 1) log 2 ( n 1)

Πρόταση Για ένα μη κενό δυαδικό δέντρο Τ, αν n 0 είναι το πλήθος των τερματικών κόμβων και n 2 είναι το πλήθος των εσωτερικών κόμβων βαθμού 2, τότε n 0 = n 2 + 1. Απόδειξη n = n 0 + n 1 + n 2 (1) Επίσης n = B + 1 όπου Β είναι το πλήθος των κλαδιών. Αλλά επίσης B = n 1 + 2n 2 άρα n = 1 + n 1 + 2n 2 (2) Από τις (1) και (2) έχουμε : n 0 = n 2 + 1.

Για τον πλήρη ορισμό του ΑΤΔ δυαδικό δέντρο απομένει να ορισθούν οι βασικές πράξεις του που είναι: 1. Δημιουργία 2. Κενό 3. Αριστερό παιδί 4. Δεξί παιδί 5. Ανάκτηση Δεδομένων (περιεχόμενο) 6. Αλλαγή Δεδομένων --------------------------------------------------------- 7. Πατέρας (γονέας) 8. Διαγραφή υποδέντρων 9. Αντικατάσταση υποδέντρων 10. Συγχώνευση 11. Αναζήτηση

Α. Απεικόνιση (σχεδιασμός) δυαδικών δέντρων με πίνακα 1 Α 1 A 2 Β 3 C 2 B 8 H 4 D 9 I 5 E F 6 7 G 8 D Αριθμούμε τις δυνητικές θέσεις των κόμβων από 1 έως 2 h -1, όπου h το ύψος (βάθος) του δυαδικού δένδρου. 4 C

Συναρτήσεις πρόσβασης Πρόταση Αν ένα πλήρες δυαδικό δέντρο με n κόμβους (δηλ. βάθος = log 2 ( n 1) ) παριστάνεται ακολουθιακά όπως παραπάνω, τότε για οποιονδήποτε κόμβο με δείκτη i, 1<= i<= n έχουμε: (1) O pateras(i) είναι στη θέση i / 2 αν i< >1. Όταν i = 1, τότε δεν υπάρχει πατέρας, γιατί το i είναι η ρίζα. (2) Το apaidi(i) είναι στη θέση 2i αν 2i <= n. Αν 2i > n, τότε ο κόμβος δεν έχει αριστερό παιδί. (3) To dpaidi(i) είναι στη θέση 2i + 1, αν 2i + 1 <= n. Αν 2i + 1 > n, τότε ο κόμβος δεν έχει δεξί παιδί.

Η απεικόνιση αυτή είναι ιδανική για ένα πλήρες δυαδικό δέντρο, ωστόσο αρκετός χώρος μνήμης παραμένει ανεκμετάλευτος στα μη πλήρη δυαδικά δέντρα. Α B C D E F G H I 1 2 3 4 5 6 7 8 9 Α B - C - - - D - 1 2 3 4 5 6 7 8 9 dentro dentro

Β. Συνδεδεμένη παράσταση δυαδικού δέντρου με πίνακες apaidi dedomena dpaidi.. index αριστερό παιδί index δεξί παιδί Ένα δυαδικό δέντρο τώρα μπορεί να παρασταθεί ως ένας πίνακας τέτοιων εγγραφών. Έχουμε λοιπόν τις παρακάτω δηλώσεις :

#define plithos... typedef... typos_stoixeiou; typedef int typossyndesis; /* όχι pointer αλλά index */ typedef struct { typos_stoixeiou dedomena; typossyndesis apaidi, dpaidi; } typos_komvou; typedef typos_komvou pinakas_komvou[plithos];

Συνδεδεμένη παράσταση δυαδικού δέντρου με πίνακες : 1 A 2 B 3 C 4 D 5 E

Pinakas_komvou Tree1; Το πρώτο στοιχείο του Tree1 δεν χρησιμοποιείται. Η ρίζα είναι στο στοιχείο 1 (δες συναρτήσεις) 1 2 3 4 5 dedomena apaidi dpaidi Α Β C D E 2 3-1 -1-1 -1 4 5-1 -1

Γ. Υλοποίηση δυαδικών δέντρων με δείκτες (pointers) typedef... typos_stoixeiou; typedef struct typos_komvou *typos_deikti; typedef struct typos_komvou { typos_stoixeiou dedomena; typos_deikti apaidi,dpaidi; }; typos_deikti riza; Στην συνέχεια όλες οι υλοποιήσεις θα είναι με δείκτες

Συνδεδεμένη παράσταση δυαδικού δέντρου με δείκτες : Α.. Β.. C... D.. E.. F. G.. H.... I

void dimiourgia_dentro(typos_deikti *riza){ /*Προ: Καμμία. Μετά: Εχει δημιουργηθεί ένα κενό δυαδικό δέντρο στο οποίο δείχνει η riza.*/ } *riza = NULL;

int keno_dentro(typos_deikti riza){ /* Προ: Εχει δημιουργηθεί το δέντρο στο οποίο δείχνει η riza Μετά: Το υποπρόγραμμα επιστρέφει την τιμή true ή false ανάλογα με το αν το δέντρο είναι κενό ή όχι.*/ } return (riza == NULL);

Διαδρομή δυαδικού δέντρου Μια από τις βασικές επεξεργασίες ενός δυαδικού δέντρου είναι η επίσκεψη κάθε κόμβου του μια μόνο φορά. Τρία Βήματα. 1. Επίσκεψη της ρίζας. 2. Διαδρομή του αριστερού υποδέντρου της. 3. Διαδρομή του δεξιού υποδέντρου της. Τα τρία αυτά βήματα μπορούν να εκτελεστούν με οποιαδήποτε διάταξη. Αν συμβολίσουμε τα παραπάνω βήματα με: Κ : Επίσκεψη ενός κόμβου. Α : Διαδρομή αριστερού υποδέντρου του. Δ : Διαδρομή δεξιού υποδέντρου του.

Τότε υπάρχουν έξι διατάξεις για την επίσκεψη των κόμβων ενός δυαδικού δέντρου που είναι οι: ΚΑΔ ΑΚΔ ΑΔΚ ΚΔΑ ΔΚΑ ΔΑΚ ΚΑΔ : προδιατεταγμένη διαδρομή. ΑΚΔ : ενδοδιατεταγμένη διαδρομή. ΑΔΚ : μεταδιατεταγμένη διαδρομή. Οι άλλες 3 (ΔΑ) δεν έχουν ενδιαφέρον (συμμετρικές).

Οι τρεις διατάξεις επίσκεψης ενός δυαδικού δέντρου: Μ Ε T A Z P προδιατεταγμένη : ΜΕΑΖΤΡΣ ενδοδιατεταγμένη : ΑΕΖΜΡΣΤ μεταδιατεταγμένη : ΑΖΕΣΡΤΜ Σ

Μεταδιατεταγμένη διαδρομή Α Δ Κ Μ Ε T Α Ζ P Πρώτα επίσκεψη Αριστερού Υποδένδρου του Μ (ρίζας) Σ

Ε Πρώτα επίσκεψη Αριστερού Υποδένδρου του Ε Α Α Ζ Πρώτα επίσκεψη Αριστερού Υποδένδρου του Α, είναι κενό. Επίσκεψη Δεξιού Υποδένδρου του Α, κενό Επίσκεψη Α Επίσκεψη Δεξιού Υποδένδρου Ε Αριστερό Ζ, κενό Δεξιό Ζ, κενό Επίσκεψη Ζ Επίσκεψη Ε

P Σ Τ P Επίσκεψη Δεξιού Υποδένδρου του Μ (ρίζας) Επίσκεψη Αριστερού Υ/Δ του Τ Επίσκεψη Αριστερού Υ/Δ του Ρ, κενό Επίσκεψη Δεξιού Υ/Δ του Ρ, Σ Επίσκεψη Αριστερού Υ/Δ του Σ, κενό Επίσκεψη Δεξιού Υ/Δ του Σ, κενό Επίσκεψη Σ Επίσκεψη Ρ Επίσκεψη Τ Επίσκεψη Μ Σ Σ

Αναδρομικό Υποπρόγραμμα Μετα-διατεταταγμένης Διαδρομής void μεταdiataksi(typos_deikti riza){ /* Aναδρομικό υποπρόγραμμα. Διατρέχει με μεταδιατεταγμένη διαδρομή ένα δυαδικό δέντρο */ } if (!keno_dentro(riza)){ metadiataksi(riza->apaidi); //αριστερό Υ/Δ metadiataksi(riza->dpaidi); //δεξί Υ/Δ episkepsi(riza); /* Eπίσκεψη της ρίζας */ }

όπου η episkepsi τυπώνει το περιεχόμενο ενός κόμβου. Η εντολή metadiataksi (riza) καλεί αναδρομικά την metadiataksi προκειμένου να εκτελέσει την μεταδιατεταγμένη διαδρομή του παραπάνω δέντρου.

Αναδρομικό Υποπρόγραμμα Ενδο-διατεταταγμένης Διαδρομής void endodiataksi(typos_deikti riza){ /* Aναδρομικό υποπρόγραμμα. Διατρέχει με ενδοδιατεταγμένη διαδρομή ένα δυαδικό δέντρο. */ if (!keno_dentro(riza)){ endodiataksi(riza->apaidi); //αριστερό Υ/Δ episkepsi(riza); // Eπίσκεψη της ρίζας endodiataksi(riza->dpaidi); /* δεξί Υ/Δ } }

όπου η episkepsi τυπώνει το περιεχόμενο ενός κόμβου. Η εντολή endodiataksi (riza) καλεί τη διαδικασία endodiataksi προκειμένου να εκτελέσει την ενδοδιατεταγμένη διαδρομή του παραπάνω δέντρου. Η ενέργεια αυτής της διαδικασίας εμφανίζεται αναλυτικά στον ακόλουθο πίνακα:

Aς υποθέσουμε ότι έχουμε το δυαδικό δέντρο: riza Μ.. Ε.. Τ... Α.. Ζ.. P. Σ..

Περιεχόμενο κόμβου Ενέργεια Αποτέλεσμα Μ Ε Α Κενό Κλήση της διαδικασίας με δείκτη στη ρίζα (Ε) του αριστερού υποδέντρου. Κλήση της διαδικασίας με δείκτη στη ρίζα (Α) του αριστερού υποδέντρου. Κλήση της διαδικασίας με δείκτη (NULL) στη ρίζα του αριστερού υποδέντρου. Κενό δέντρο, επιστροφή στον κόμβο-πατέρα. Α Εκτύπωση του περιεχομένου του κόμβου Α

Περιεχόμενο κόμβου Ενέργεια Αποτέλεσμα Α Κενό Α Κλήση της διαδικασίας με δείκτη NULL στη ρίζα του δεξιού υποδέντρου. Κενό δέντρο, επιστροφή στον κόμβο-πατέρα. Επιστροφή στον κόμβο πατέρα. Ε Εκτύπωση του περιεχομένου του Ε του κόμβου. Ε Κλήση της διαδικασίας με δείκτη στη ρίζα (Ζ) του δεξιού υποδέντρου.

Περιεχόμενο κόμβου Ενέργεια Αποτέλεσμα Ζ Κενό Κλήση της διαδικασίας με δείκτη (NULL) στη ρίζα του αριστερού υποδέντρου. Κενό δέντρο, επιστροφή στον κόμβο-πατέρα. Ζ Εκτύπωση του περιεχομένου του Ζ κόμβου. Ζ Κλήση της διαδικασίας με δείκτη (NULL) στη ρίζα του δεξιού υποδέντρου.

Περιεχόμενο κόμβου Ενέργεια Αποτέλεσμα Κενό Ζ Ε Μ Μ Κενό δέντρο, επιστροφή στον κόμβο πατέρα. Επιστροφή στον κόμβο-πατέρα. Επιστροφή στον κόμβο-πατέρα. Εκτύπωση του περιεχομένου του κόμβου. Κλήση της διαδικασίας με δείκτη στη ρίζα (Τ) του δεξιού υποδέντρου. Μ

Περιεχόμενο κόμβου Ενέργεια Αποτέλεσμα Τ P Κενό Κλήση της διαδικασίας με δείκτη στη ρίζα (P) του αριστερού υποδέντρου. Κλήση της διαδικασίας με δείκτη (NULL) στη ρίζα του αριστερού υποδέντρου. Κενό δέντρο, επιστροφή στον κόμβο πατέρα. P Εκτύπωση του περιεχομένου του κόμβου P

Περιεχόμενο κόμβου Ενέργεια Αποτέλεσμα P Σ Κενό Κλήση της διαδικασίας με δείκτη στη ρίζα (Σ) του δεξιού υποδέντρου. Κλήση της διαδικασίας με δείκτη (NULLl) στη ρίζα του αριστερού υποδέντρου. Κενό δέντρο, επιστροφή στον κόμβο-πατέρα. Σ Εκτύπωση του περιεχομένου του κόμβου Σ

Περιεχόμενο κόμβου Ενέργεια Αποτέλεσμα Σ Κενό Σ P Κλήση της διαδικασίας με δείκτη (NULL) του δεξιού υποδέντρου. Κενό δέντρο, επιστροφή στον κόμβο πατέρα. Επιστροφή στον κόμβο-πατέρα Επιστροφή στον κόμβο-πατέρα Τ Εκτύπωση του περιεχομένου του κόμβου. Τ

Περιεχόμενο κόμβου Ενέργεια Αποτέλεσμα T Κενό Τ Μ Κλήση της διαδικασίας με δείκτη (NULL) του δεξιού υποδέντρου. Κενό δέντρο, επιστροφή στον κόμβο-πατέρα. Επιστροφή στον κόμβο-πατέρα Τέλος διαδικασίας

Eίναι φανερό ότι η προδιατεταγμένη και μεταδιατεταγμένη διαδρομή προκύπτουν αν απλά αλλάξουμε την σειρά των εντολών στη διαδικασία endodiataksi, όπως φαίνεται παρακάτω : void prodiataksi(typos_deikti riza){ /* προδιατεταγμένη διαδρομή */ } if (!keno_dentro(riza)){ episkepsi(riza); prodiataksi(riza->apaidi); prodiataksi(riza->dpaidi); }

void metadiataksi(typos_deikti riza){ /* μεταδιατεταγμένη διαδρομή */ } if (!keno_dentro(riza)){ metadiataksi(riza->apaidi); metadiataksi(riza->dpaidi); episkepsi(riza); } Πολυπλοκότητα Ο(n) Περνάμε από κάθε κόμβο είτε ΜΙΑ φορά (φύλλο) είτε ΔΥΟ φορές (εσωτερικός κόμβος).

Μη Αναδρομικά Υποπρογράμματα Διαδρομής riza A B C D E F G

Μη αναδρομικός αλγόριθμος για την ενδοδιατεταγμένη διαδρομή (με χρήση στοίβας) 1. trexon = riza; 2. Όσο η στοίβα δεν είναι κενή και trexon!= NULL να εκτελούνται: α. Να διατρέχονται οι αριστεροί κόμβοι του αριστερού υποδέντρου και να τοποθετούνται οι διευθύνσεις τους σε μια στοίβα. {έως ότου αριστερό υπόδεντρο κενό} β. Αν η στοίβα δεν είναι κενή τότε (i) Εξαγωγή διεύθυνσης από στοίβα (ii) Επεξεργασία του περιεχομένου του. (iii) Συνέχισε με δεξί παιδί, trexon= δεξι παιδί

void endodiataksi(typos_deikti riza){//eπαναληπτικό typos_stoivas stoiva; typos_deikti trexon = riza; dimiourgia(&stoiva); do {//Διατρέχονται οι κόμβοι των αριστερών κλαδιών while (trexon!=null){ othisi(&stoiva,trexon); trexon = trexon->apaidi; } /* Tο αριστερό υπόδεντρο είναι κενό */ if (!keni(stoiva)) { exagogi(&stoiva,&trexon); episkepsi(trexon); /*Eπίσκεψη ρίζας */ trexon = trexon->dpaidi; /*δεξιός κόμβος*/ } while ((!keni(stoiva)) (trexon!=null)); }

Ανομοιογενή δυαδικά δέντρα (παραστάσεων-expressions) Συχνά τα δεδομένα που περιέχονται σε διαφορετικούς κόμβους δεν είναι όλα του ίδιου τύπου. + - D A * Παράσταση της (A-(B*C))+D με δυαδικό δέντρο Β C

Για τη μετατροπή μιας ενδοδιατεταγμένης παράστασης (expression) κατασκευάζουμε δυαδικό δέντρο, το οποίο ονομάζεται δέντρο παράστασης. Σε κάθε βήμα να αναζητείται ο τελεστής εκείνος ο οποίος θα εκτελεστεί τελευταίος (έχει τη μικρότερη ιεραρχία).

Δημουργία δυαδικού δέντρου παράστασης της 12-6*(3+8)-4*12 1ο Βήμα (ρίζα ο τελεστής που εκτελείται τελευταίος) - 12-6*(3+8) 4*12

2ο Βήμα (αναδρομικά σε αριστερό και δεξί υποδένδρο) - - 4*12 12 6*(3+8)

3ο Βήμα - - * 12 * 4 12 6 3+4

4ο Βήμα - - * 12 * 4 12 6 + 3 8

typedef enum {oros,telest } typos_dedomenon; typedef struct typos_komvou *typos_deikti; struct telestis { char xar; typos_deikti apaidi; typos_deikti dpaidi; }; union oros_telestis{ float arithmos; struct telestis xaraktiras; }; typedef struct typos_komvou { typos_dedomenon simadi; oros_tel dedomena; };

Στους παραπάνω ορισμούς παρατηρούμε ότι μόνο οι κόμβοι που περιέχουν τελεστές έχουν πεδία δεικτών apaidi και dpaidi για τους υπόλοιπους δεν χρειάζονται γιατί είναι φύλλα. Στη συνέχεια παρουσιάζεται ένα αναδρομικό υποπρόγραμμα που υπολογίζει την τιμή της παράστασης.

float ypologismos_dentrou(typos_deikti riza){ float oros1,oros2; char symbolo; switch (riza->simadi){ case oros:return riza->dedomena.arithmos; case telestis: oros1 = ypologismos_dentrou (riza->dedomena.xaraktiras.apaidi); oros2 = ypologismos_dentrou (riza->dedomena.xaraktiras.dpaidi); symbolo = riza->dedomena.xaraktiras.xar; } } return telestis(symbolo, oros1, oros2);