e mail konsterg@aegean gr n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Κώστας Στεργίου Λέκτορας Τμήμα Μηχανικών Πληροφοριακών & Επικοινωνιακών Συστημάτων PowerPoint Presentation
Download Presentation
Κώστας Στεργίου Λέκτορας Τμήμα Μηχανικών Πληροφοριακών & Επικοινωνιακών Συστημάτων

Loading in 2 Seconds...

play fullscreen
1 / 47

Κώστας Στεργίου Λέκτορας Τμήμα Μηχανικών Πληροφοριακών & Επικοινωνιακών Συστημάτων - PowerPoint PPT Presentation


  • 125 Views
  • Uploaded on

Διακριτά Μαθηματικά Ι I Δέντρα Αναζήτησης. Κώστας Στεργίου Λέκτορας Τμήμα Μηχανικών Πληροφοριακών & Επικοινωνιακών Συστημάτων Πανεπιστήμιο Αιγαίου e-mail: konsterg@aegean.gr. Δυαδικά Δέντρα Αναζήτησης. Ένας τρόπος αναπαράστασης μιας ταξινομημένης λίστας αντικειμένων .

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Κώστας Στεργίου Λέκτορας Τμήμα Μηχανικών Πληροφοριακών & Επικοινωνιακών Συστημάτων' - akiva


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
e mail konsterg@aegean gr

Διακριτά ΜαθηματικάΙIΔέντρα Αναζήτησης

Κώστας Στεργίου

Λέκτορας

Τμήμα Μηχανικών

Πληροφοριακών & Επικοινωνιακών Συστημάτων

Πανεπιστήμιο Αιγαίου

e-mail: konsterg@aegean.gr

ΤΜΗΜΑ ΜΠΕΣ

slide2
Δυαδικά Δέντρα Αναζήτησης
  • Ένας τρόπος αναπαράστασης μιας ταξινομημένης λίστας αντικειμένων.
    • Υποστηρίζει τις παρακάτω διεργασίες σε γρήγορο χρόνο(Θ(log n) πολυπλοκότητα μέσης περίπτωσης, όπως θα δούμε αργότερα):
      • Αναζήτηση ενός υπάρχοντος αντικειμένου.
      • Εισαγωγή ενός καινούργιου αντικειμένου, αν δεν είναι ήδη παρόν.
    • Υποστηρίζει την εκτύπωση όλων των αντικειμένων σεΘ(n) χρόνο
  • Η εισαγωγή ενός αντικειμένου σε μια συνεχόμενη ακολουθίαaiείναι πιο ακριβή(Θ(n) στη χειρότερη περίπτωση).

ΤΜΗΜΑ ΜΠΕΣ

slide3
Τα αντικείμενα αποθηκεύονται σε κόμβους του δέντρου.

Το δέντρο είναι οργανωμένο κατά τέτοιο τρόπο ώστε να ισχύει πάντα το παρακάτω:

Για κάθε αντικείμενοx,

Το κλειδί κάθε κόμβου στο αριστερό υποδέντρο τουxείναι μικρότερο του κλειδιού του x.

Το κλειδί κάθε στο δεξιό υποδέντρο τουxείναι μεγαλύτερο του κλειδιού τουx.

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

Παράδειγμα:

7

3

12

1

5

9

15

0

2

8

11

ΤΜΗΜΑ ΜΠΕΣ

slide4
Δέντρα Απόφασης
  • Ένα δυαδικό δέντρο αναζήτησης είναι μια ειδική κατηγορία ενός δέντρου απόφασης
  • Ένα δέντρο απόφασης (decision tree) αναπαριστά μια διαδικασία λήψης απόφασης.
    • Κάθε πιθανό “σημείο απόφασης” ή κατάσταση αναπαριστάται από έναν κόμβο.
    • Κάθε πιθανή επιλογή που μπορεί να γίνει σε ένα σημείο απόφασηςαναπαριστάται με μια ακμή προς έναν κόμβο-παιδί.
  • Σε εκτεταμένα δέντρα απόφασης που χρησιμοποιούνται στην ανάλυση αποφάσεων, συμπεριλαμβάνονται κόμβοι που αναπαριστούντυχαία γεγονότακαι τα αποτελέσματα τους.

ΤΜΗΜΑ ΜΠΕΣ

slide5
Πρόβλημα Ζύγισης Κερμάτων
  • Υποθέστε ότι έχετε 8 κέρματα, ένα εκ των οποίων είναι πλαστό και ελαφρύτερο από τα άλλα, και μιαζυγαριά όπως η διπλανή.
    • Δε χρειάζεται ζυγαριά που μετράει ακριβές βάρος για να λυθεί αυτό το πρόβλημα!
  • Πόσες ζυγίσεις απαιτούνται για να είστε σίγουροι ότι βρέθηκε το πλαστό νόμισμα?

?

ΤΜΗΜΑ ΜΠΕΣ

slide6
Ως Πρόβλημα Δέντρου Απόφασης
  • Σε κάθε κατάσταση, διαλέγουμε δύο διακριτάκαι ίσου μεγέθους υποσύνολα κερμάτων για να βάλουμε στη ζυγαριά.

Μια δεδομένη ακολουθίαζυγισμάτωνδίνει έναδέντρο απόφασης μεπαράγοντα διακλάδωσης 3.

Το βάρος “αποφασίζει” ανθα γείρει αριστερά,

δεξιά, ή θα

ισορροπήσει.

ΤΜΗΜΑ ΜΠΕΣ

slide7
Εφαρμόζοντας το Θεώρημα Ύψους Δέντρων
  • Το δέντρο απόφασης πρέπει να έχει τουλάχιστον 8 φύλλα, μια και υπάρχουν 8 πιθανά αποτελέσματα.
    • Σε σχέση με το ποιο νόμισμα είναι το πλαστό.
  • Το θεώρημα ύψους δέντρου μας λέει, h≥logm.
    • Όπου καιmείναι το πλήθος των φύλλων και ο παράγοντας διακλάδωσης αντίστοιχα
    • Οπότε το δέντρο απόφασης πρέπει να έχει ύψοςh≥ log38 = 1.893… = 2.
  • Ας δούμε αν μπορούμε να λύσουμε το πρόβλημα μεμόνο 2 ζυγίσεις…

ΤΜΗΜΑ ΜΠΕΣ

slide8
Γενική Στρατηγική Επίλυσης
  • Το πρόβλημα είναι παράδειγμα αναζήτησης ενόςμοναδικού συγκεκριμένου αντικειμένου, ανάμεσα σε μια λίστα απόnφαινομενικά ίδια αντικείμενα.
    • Κάτι ανάλογο του “ψάχνοντας καρφίτσα σε αχυρώνα.”
  • Χρησιμοποιώντας τη ζυγαριά, μπορούμε να επιτεθούμε στο πρόβλημα με μιαδιαίρει-και-βασίλευεστρατηγική, παρόμοια με αυτήστη δυαδική αναζήτηση.
    • Θέλουμε να μειώσουμε το σύνολο των πιθανών σημείωνόπου το αντικείμενο που ψάχνουμε (νόμισμα) μπορεί να βρεθείαπόnσε μόνο 1, με έναν λογαριθμικό τρόπο.
  • Κάθε ζύγιση έχει 3 πιθανά αποτελέσματα.
    • Μπορούμε να το χρησιμοποιήσουμε αυτό ώστε κάθε φορά να διαιρούμε τον εναπομείναντα χώρο αναζήτησης σε τρία τμήματα
  • Αυτή η στρατηγική θα οδηγήσει στοελάχιστοπιθανόπλήθος ζυγίσεων που απαιτούνται

ΤΜΗΜΑ ΜΠΕΣ

slide9
Γενική Στρατηγική Επίλυσης
  • Σε κάθε βήμα, βάλεn/3των nνομισμάτωνπρος εξέτασησε κάθε πλευρά της ζυγαριάς.
    • Αν η ζυγαριά κλίνει προς τα αριστερά, τότε:
      • Το ελαφρύ πλαστό βρίσκεταιστο δεξιό υποσύνολοn/3≈ n/3νομισμάτων.
    • Ανη ζυγαριά κλίνει προς τα δεξιά, τότε:
      • Το ελαφρύ πλαστό βρίσκεταιστο αριστερό υποσύνολοn/3≈ n/3νομισμάτων.
    • Ανη ζυγαριά ισορροπήσει τότε:
      • Το ελαφρύ πλαστό βρίσκεταιστα εναπομείναντα n− 2n/3 ≈ n/3νομίσματα που δε ζυγίσαμε!

Μπορεί να αποδειχθεί ότι η στρατηγική αυτή οδηγεί σε ισορροπημένο

3-δικό δέντρο.

ΤΜΗΜΑ ΜΠΕΣ

slide10
Δέντρο Απόφασης Ζύγισης Νομισμάτων
  • Στη δική μας περίπτωση το δέντρο έχει την παρακάτω μορφή:

123 vs 456

δεξιά:

123

ισορροπία:78

αριστερά:

456

4 vs. 5

1 vs. 2

7 vs. 8

Α:1

Α:4

Α:7

Δ:2

Δ:5

Ι:6

Δ:8

Ι:3

ΤΜΗΜΑ ΜΠΕΣ

slide11
Δέντρα Αναζήτησης
  • Binary Search Tree (BST): Ορισμοί
  • BST Δομή Δεδομένων
  • BST Λειτουργίες
    • findMin, findMax
    • find
    • insert
    • remove

ΤΜΗΜΑ ΜΠΕΣ

slide12
Δυαδικά Δέντρα
  • Ένα δυαδικό δέντρο (binary tree)είναι ένα δέντρο όπου κάθε κόμβος έχει το πολύ δύο παιδιά
    • δηλαδή κάθε κόμβος έχει 0, ή 1, ή 2 παιδιά

binary tree

ΤΜΗΜΑ ΜΠΕΣ

slide13
Δυαδικό Δέντρο Αναζήτησης
  • Ένα δυαδικό δέντρο αναζήτησης (binary search tree) (BST) είναι ένα δυαδικό δέντρο όπου για κάθε κόμβο X,
      • Όλοι οι κόμβοι στο αριστερό υποδέντρο του X περιέχουν κλειδί < από το κλειδί του X
      • Όλοι οι κόμβοι στο δεξιό υποδέντρο του X περιέχουν κλειδί > από το κλειδί του X
  • Οι κανόνες 1 και 2 είναι γνωστοί ως η ιδιότητα BST
  • Το κλειδί ενός κόμβου είναι η τιμή του δεδομένου που αποθηκεύει

ΤΜΗΜΑ ΜΠΕΣ

slide14

9

7

17

4

14

21

11

25

27

12

22

Δυαδικό Δέντρο Αναζήτησης – Παράδειγμα
  • Η BST ιδιότηταισχύει σε κάθε κόμβο

ΤΜΗΜΑ ΜΠΕΣ

slide15
Κλειδιά Κόμβων Δέντρου Αναζήτησης
  • Θα χρησιμοποιήσουμε κλειδιά που είναι ακέραιοι αριθμοί
  • Μπορούμε να χειριστούμε μη-ακέραιακλειδιά με παρόμοιο τρόπο
  • Γενικά σε κάθε κόμβο του δέντρου μπορεί εκτός από το κλειδί να περιέχονται και άλλες πληροφορίες. Π.χ.
    • ΑΜ:int (κλειδί)

Όνομα: string

Ημερομηνία Γέννησης: date

κτλ.

ΤΜΗΜΑ ΜΠΕΣ

slide16
Βασική Δομή Δεδομένων Δέντρου Αναζήτησης
  • Όπως και σε ένα γενικό δέντρο, η βασική δομή δεδομένων σε ένα BST είναι ένας κόμβος που ονομάζουμε BinaryNode
  • Αντίθετα με τα γενικά δέντρα όπου το πλήθος των παιδιών κάθε κόμβου δεν είναι γνωστό στατικά, ένας BST κόμβος μπορεί να έχει το πολύ δύο παιδιά
  • Οπότε, είναι λογικό να χρησιμοποιήσουμε δύο δείκτες lchild (left-child) και rchild (right-child)
    • υποθέτουμε ότι οι δείκτες των φύλλων είναι NULL

ΤΜΗΜΑ ΜΠΕΣ

slide17
Βασική Δομή Δεδομένων Δέντρου Αναζήτησης

class BinaryNode{

private:

int key; // the integer key

BinaryNode *lchild; // pointer to left child

BinaryNode *rchild; // pointer to right child

public:

// public methods go here

}

ΤΜΗΜΑ ΜΠΕΣ

slide18
Λειτουργίες σε Δέντρα Αναζήτησης
  • Οι βασικές λειτουργίες σε ένα BST είναι:
    • findMin:βρες το ελάχιστο κλειδί μέσα στο BST
    • findMax: βρες το μέγιστο κλειδί μέσα στο BST
    • find(x):βρες το κλειδί ‘x’ μέσα στο BST
    • insert(x): εισήγαγε το κλειδί ‘x’ μέσα στο BST
    • remove(x):διέγραψε το κλειδί ‘x’ από το BST
    • isEmpty:δες αν το BST είναι άδειο
    • makeEmpty:άδειασε το BST
    • printTree:τύπωσε όλα τα κλειδιά στο BST

ΤΜΗΜΑ ΜΠΕΣ

findmin
findMin
  • Σε ένα δέντροόλες οι διασχίσεις αρχίζουν από τη ρίζα
  • Σύμφωνα με την BST ιδιότητα, το κλειδί του lchild της ρίζας θα είναι < του κλειδιού της ρίζας
  • Το κλειδί του lchild του lchild της ρίζας θα είναι < του κλειδιού του lchild της ρίζας κ.ο.κ.
  • Αν μια διάσχιση ενός BST αρχίσει στη ρίζα και «πηγαίνει συνέχεια αριστερά»καθώς κατεβαίνει προς τα κάτω, ο τελευταίος κόμβος στη διάσχιση θα έχει το μικρότερο κλειδί στο δέντρο

ΤΜΗΜΑ ΜΠΕΣ

findmin1
findMin
  • Η παράμετρος εισόδου στη findMin μέθοδοείναι η ρίζα του BST
    • findMin(root);
  • Η findMin μέθοδοςεπιστρέφει τον κόμβο που περιέχει το μικρότερο κλειδί στο BST
  • Έτσι, ο τύπος που επιστρέφει η findMin είναι BinaryNode*

ΤΜΗΜΑ ΜΠΕΣ

findmin algorithm
findMin Algorithm
  • Βήματα αλγορίθμου:
    • Ξεκίνα από τη ρίζα
    • Αν η ρίζα είναι NULL (άδειο BST) επέστρεψε NULL
    • Σε κάθε κόμβο πήγαινε στο lchild
    • Ολοκλήρωσε τη διάσχισηόταν συναντηθεί ο πρώτος NULL δείκτης
    • Επέστρεψε τον τελευταίο κόμβο που επισκέφτηκες
  • Ο αλγόριθμος μπορεί να υλοποιηθεί αναδρομικά ή μη-αναδρομικά

ΤΜΗΜΑ ΜΠΕΣ

findmin algorithm1
findMin Algorithm (με αναδρομή)

// Recursive algorithm

BinaryNode* findMin(BinaryNode *t){

// check if the tree is empty

if (t==NULL) return NULL;

// if the left child is null

// return the current node

if (t->lchild==NULL) return t;

return findMin (t->lchild);

}

ΤΜΗΜΑ ΜΠΕΣ

findmin algorithm2
findMin Algorithm (χωρίς αναδρομή)

// Non-recursive algorithm

BinaryNode* findMin(BinaryNode *t)

begin

// έλεγξε αν το δέντρο είναι άδειο

if (t!=NULL)

begin

// προχώρα κάτω προς το lchild σε κάθε κόμβο

while (t->lchild!=NULL)

t = t->lchild;

end

return t;

end

ΤΜΗΜΑ ΜΠΕΣ

findmin2

9

7

17

4

14

21

11

25

27

12

22

findMin
  • Παράδειγμα:

ΤΜΗΜΑ ΜΠΕΣ

findmax
findMax
  • Σύμφωνα με την BST ιδιότητα, το κλειδί του rchild της ρίζας θα είναι > του κλειδιού της ρίζας
  • Το κλειδί του rchild του rchild της ρίζας θα είναι > του κλειδιού του rchild της ρίζας κ.ο.κ.
  • Χρησιμοποιώντας παρόμοια τεχνική όπως στη findMin, το μέγιστο κλειδί σε ένα BST πρέπει να βρίσκεται ξεκινώντας από τη ρίζα και «πηγαίνοντας όλο δεξιά»

ΤΜΗΜΑ ΜΠΕΣ

findmax1
findMax
  • Βήματα αλγορίθμου:
    • Ξεκίνα από τη ρίζα
    • Αν η ρίζα είναι NULL (άδειο BST) επέστρεψε NULL
    • Σε κάθε κόμβο πήγαινε στο rchild
    • Ολοκλήρωσε τη διάσχισηόταν συναντηθεί ο πρώτος NULL δείκτης
    • Επέστρεψε τον τελευταίο κόμβο που επισκέφτηκες
  • Η παράμετρος εισόδου στη findMax και ο τύπος που επιστρέφειείναι ίδια με τη findMin

ΤΜΗΜΑ ΜΠΕΣ

findmax algorithm
findMax Algorithm (με αναδρομή)

// Recursive algorithm

BinaryNode* findMax(BinaryNode *t){

// check if the tree is empty

if (t==NULL) return NULL;

// if the right child is null

// return the current node

if (t->rchild==NULL) return t;

return findMax (t->rchild);

}

ΤΜΗΜΑ ΜΠΕΣ

findmax algorithm1
findMax Algorithm (χωρίς αναδρομή)

// Non-recursive algorithm

BinaryNode* findMax(BinaryNode *t)

begin

// έλεγξε αν το δέντρο είναι άδειο

if (t!=NULL)

begin

// προχώρα κάτω προς το rchild σε κάθε κόμβο

while (t->rchild!=NULL)

t = t->rchild;

end

return t;

end

ΤΜΗΜΑ ΜΠΕΣ

findmax2

9

7

17

4

14

21

11

25

27

12

22

findMax
  • Παράδειγμα:

ΤΜΗΜΑ ΜΠΕΣ

slide30
find
  • Ο αλγόριθμος find είναι συνδυασμός των τεχνικών της findMin και της findMax
  • Η διαφορά μεταξύ του find και των findMin/findMax:
    • Οι findMin/findMax εγγυώνται ότι θα επιστρέψουν έναν κόμβο όταν το BST δεν είναι άδειο. Από την άλλη, ο αλγόριθμος find επιστρέφει έναν κόμβο μόνο όταν το ζητούμενο κλειδί ‘x’ βρεθεί μέσα στο BST

ΤΜΗΜΑ ΜΠΕΣ

slide31
find
  • Οι παράμετροι εισόδου είναι η ρίζα του BST και το κλειδί προς αναζήτηση: int x
    • find(x, root);
  • Η μέθοδος find επιστρέφει τον κόμβο στο BST που περιέχει το κλειδί ‘x’ αν υπάρχει,και NULL αν δεν υπάρχει
  • Ο τύπος που επιστρέφει είναι πάλι BinaryNode*

ΤΜΗΜΑ ΜΠΕΣ

find algorithm
find Algorithm

Βήματα αλγορίθμου:

1) Start at root; current_node = root

2) if current_node is NULL return NULL

3) if (x < current_node -> key)

current_node = current_node -> lchild

4) if (x > current_node -> key)

current_node = current_node -> rchild

Repeat steps 2-4 until x = = current_node->key or current_node = = NULL

ΤΜΗΜΑ ΜΠΕΣ

find algorithm1
find Algorithm

// Non-recursive algorithm

BinaryNode* findMax(BinaryNode *t, key x)

begin

// έλεγξε αν το δέντρο είναι άδειο

if (t!=NULL)

begin

while (t!=NULL && x!=t->key)

begin

if (x < t -> key)

t = t->lchild;

else if (x > t -> key)

t = t->rchild;

end

end

return t;

end

ΤΜΗΜΑ ΜΠΕΣ

find algorithm2
find Algorithm (με αναδρομή)

// ‘t’ denotes the current node

BinaryNode* find(int x, BinaryNode *t){

// check if current node is NULL

if (t==NULL) return NULL;

else if (x < t->key)

// search along left subtree

return find(x, t->lchild);

else if (x > t->key)

// search along right subtree

return find(x, t->rchild);

else

// if we reach here it means

// x == t->key. x is found

// Return the node containing x

return t;

ΤΜΗΜΑ ΜΠΕΣ

slide35

9

7

17

4

14

21

11

25

27

12

22

find
  • Παράδειγμα:
    • Εύρεση του κλειδιού ‘12’
    • Εύρεση του κλειδιού ‘23’

ΤΜΗΜΑ ΜΠΕΣ

insert

9

9

7

17

7

17

4

14

21

4

14

21

11

25

5

11

25

27

12

22

27

12

22

Insert
  • Εισαγωγή του κλειδιού‘5’

ΤΜΗΜΑ ΜΠΕΣ

insert 5
Insert – Παράδειγμα (εισαγωγή του 5)
  • Ξεκινάμε από τη ρίζα που περιέχει το κλειδί 9
  • 5 < 9, πηγαίνουμε στο lchild του 9 που είναι το 7
  • 5 < 7, πηγαίνουμε στο lchild του 7 που είναι το 4
  • 5 > 4, πηγαίνουμε στο rchild του 4 που είναι το NULL
  • Δεν υπάρχει άλλο σημείο στο BST που μπορεί να περιέχει το 5 λόγω της BST ιδιότητας
  • Οπότε, εισάγουμε το 5 ως το rchild του 4.

ΤΜΗΜΑ ΜΠΕΣ

insert1
Insert
  • Κανόνας: Διπλά κλειδιά δεν επιτρέπονται σε ένα BST
  • Αν θέλουμε να εισάγουμε το κλειδί ‘x’, πρώτα κάνουμε ένα find(x)
  • Αν το‘x’βρεθεί, δεν κάνουμε την εισαγωγή
  • Αν το‘x’δε βρεθεί, προχωράμε με την εισαγωγή
  • Αν το ‘x’ δε βρεθεί, τότε η find τελειώνει στον κόμβο κάτω από τον οποίο πρέπει να μπει το ‘x’

ΤΜΗΜΑ ΜΠΕΣ

insert2
Insert
  • insert (5, root)
  • Πρώτα προσπαθούμε να βρούμε αν το 5 είναι ήδη στο BST
  • find algorithm
    • 5 < 9 πηγαίνουμε στο lchild του 9 που είναι το 7
    • 5 < 7 πηγαίνουμε στο lchild του 7 που είναι το 4
    • 5 > 4 πηγαίνουμε στο rchild του4 που είναι null και η find τερματίζει επιστρέφοντας NULL
  • Ο τελευταίος κόμβος που επισκεφτήκαμε ήταν ο 4
  • Το καινούργιο κλειδί 5 πρέπει να εισαχθεί κάτω από τον 4
  • Δημιουργούμε έναν καινούργιο κόμβο με κλειδί 5 και μια 5 > 4 προσθέτουμε τον καινούργιοκόμβο ως rchild του 4

ΤΜΗΜΑ ΜΠΕΣ

insert3
Insert
  • Βήματα Αλγορίθμου:
    • Τρέξε ένα find για το κλειδί που θέλουμε να εισαχθεί
    • Αν το κλειδί βρεθεί, επέστρεψε NULL.
    • Αν το κλειδί δε βρεθεί, εισήγαγε έναν καινούργιο κόμβο που περιέχει το κλειδί ως αριστερό ή δεξιό παιδί του τελευταίου κόμβου που επισκέφτηκε η find

Παράδειγμα: Εισαγωγή των κλειδιών 6, 9, 14, 17, 5, 7, 16, 20, 18, 19, 4, 11 σε ένα κενό αρχικά δέντρο αναζήτησης

ΤΜΗΜΑ ΜΠΕΣ

insert algorithm
insert Algorithm (με αναδρομή)

// Recursive Algorithm

// ‘t’ is the current node

void insert(int x, BinaryNode *t){

// if the current node is NULL

// we have not found the key

// in the BST and reached a NULL

// pointer. So, we insert a new node

// containing ‘x’ at the current_node.

if (t == NULL) {

t = new BinaryNode(x, NULL, NULL);

return;}

ΤΜΗΜΑ ΜΠΕΣ

insert algorithm1
insert Algorithm (με αναδρομή)

// in this portion we are doing the

// steps for the find algorithm

else if (x < t->key)

return insert(x, t->lchild);

else if (x > t->key)

return insert(x, t->rchild);

elsereturn NULL;

// the code reaches here if

// x == t-> key.

}

ΤΜΗΜΑ ΜΠΕΣ

remove
remove
  • Όπως στην περίπτωση του insert, πρέπει πρώτα να κάνουμε ένα find
  • Αν δε βρεθεί ο κόμβος, προφανώς δε μπορούμε να τον διαγράψουμε
  • Αν βρεθεί υπάρχουν 3 διαφορετικές περιπτώσεις ανάλογα με το είδος του κόμβου:
    • κόμβοι χωρίς παιδιά (φύλλα),
    • κόμβοι με ένα παιδί
    • κόμβοι με δύο παιδιά

ΤΜΗΜΑ ΜΠΕΣ

remove1

9

7

17

4

14

21

11

25

27

27

12

22

remove - Κανόνες
  • Κανόνες:
    • 1) Αν ο κόμβος που θέλουμε να διαγράψουμε είναι φύλλο, τότε διαγράφεται κατευθείαν

Μπορεί να διαγραφεί κατευθείαν

ΤΜΗΜΑ ΜΠΕΣ

remove2

21

21

25

27

27

remove - Κανόνες

2) Αν ο κόμβος που θέλουμε να διαγράψουμεέχει ένα παιδί, το παιδί αυτό γίνεται το καινούργιο παιδί του πατέρα του διαγραμμένου κόμβου

διέγραψε το 25

ΤΜΗΜΑ ΜΠΕΣ

remove3
remove - Κανόνες

3) Αν ο κόμβος που θέλουμε να διαγράψουμεέχει δύο παιδιά

  • Αντικατέστησε τον κόμβο προς διαγραφή με τον κόμβο που περιέχει τοελάχιστο κλειδί στο δεξιό του υποδέντρο (χρησιμοποιώντας τη findMin στη ρίζα του δεξιού υποδέντρου του κόμβου προς διαγραφή)
    • Ο κόμβος με το ελάχιστο κλειδί δε μπορεί να έχει lchild. Αν είχε τότε το lchild θα περιείχε το ελάχιστο κλεδί
    • Οπότε ο κόμβος με το ελάχιστο κλειδί έχει μόνο rchild ή καθόλου παιδιά

ΤΜΗΜΑ ΜΠΕΣ

remove4

6

2

8

1

5

5

3

4

remove - Κανόνες

Αντικατέστησε το ‘2’

με το ‘3’

6

3

8

διέγραψε το 2

1

Αυτός ο κόμβος

και οι σχετιζόμενοι

δείκτες διαγράφονται

Το ‘2’ έχει 2 παιδιά.

findMin στη ρίζα του

δεξιού υποδέντρου

του ‘2’ δίνει ‘3’ που

έχει ένα rchild

3

4

ΤΜΗΜΑ ΜΠΕΣ