Δζντρα Δομζσ Δεδομζνων
Περιεχόμενα Δζντρα Γενικζσ ζννοιεσ Κόμβοσ ενόσ δζντρου Δυαδικά δζντρα αναηιτθςθσ Αναηιτθςθ Κόμβου Ειςαγωγι ι δθμιουργία κόμβου
Δζντρα Γενικζσ ζννοιεσ Οι προθγοφμενεσ δομζσ που εξετάςτθκαν λζγονται γραμμικζσ διότι διακζτουν τθ ςχζςθ τθσ ςυνεχόμενθσ λογικισ γειτονικότθτασ των ςτοιχείων τουσ ε αυτιν τθν παρουςίαςθ κα εξετάςουμε μια μθ γραμμικι δομι, τα δζντρα. Η δομι του δζντρου ςε γενικζσ γραμμζσ δεν είναι τίποτε άλλο παρά θ ςφνδεςθ κόμβων με τρόπο ανάλογο ενόσ πραγματικοφ δζντρου
Δζντρο - Οριςμόσ Δζντρο είναι ζνα ςφνολο κόμβων που ςυνδζονται με ακμζσ Τπάρχει ζνασ μόνο κόμβοσ που ονομάηεται ρίηα και ςτον οποίο δεν καταλιγουν αλλά μόνο ξεκινοφν ακμζσ Από κάκε κόμβο μποροφν να ξεκινοφν, καμία, μία ι περιςςότερεσ ακμζσ ε κάκε κόμβο (εκτόσ τθσ ρίηασ) καταλιγει μόνο μία ακμι
Γραφικι αναπαράςταςθ δζντρων Ρίηα Ακμζσ Κόμβοσ
Δζντρα - Οριςμοί Ζνασ κόμβοσ Α είναι πατζρασ των κόμβων Β και Γ όταν από τον Α ξεκινοφν ακμζσ που καταλιγουν ςτουσ Β και Γ. Αντίςτοιχα οι κόμβοι Β και Γ είναι τα παιδιά του Α. Βακμόσ ενόσ κόμβου είναι ο αρικμόσ των παιδιϊν του. Βακμόσ ενόσ δζντρου είναι ο μζγιςτοσ από τουσ βακμοφσ των κόμβων του. Δζντρα βακμοφ n ονομάηονται n-αδικά δζντρα
Δζντρα - Οριςμοί Οι κόμβοι που δεν ζχουν παιδιά λζγονται τερματικοί κόμβοι ι φφλλα. Οι υπόλοιποι κόμβοι λζγονται εςωτερικοί ι μθ τερματικοί ι κλαδιά. Επίπεδο ενόσ κόμβου είναι ο αρικμόσ των προγόνων του μζχρι τθ ρίηα ςυν 1 Σο μζγιςτο επίπεδο των κόμβων ενόσ δζντρου λζγεται βάκοσ ι φψοσ του δζντρου Τπόδεντρο ονομάηεται το δζντρο που ςχθματίηεται αν ϊσ ρίηα λθφκεί ζνασ οποιοςδιποτε κόμβοσ.
Δζντρα - Οριςμοί Μικοσ μονοπατιοφ ενόσ κόμβου λζγεται ο αρικμόσ των κόμβων που πρζπει να περάςουμε για να φτάςουμε από τθ ρίηα ςε αυτόν τον κόμβο Εςωτερικό μικοσ μονοπατιοφ είναι το άκροιςμα του μικουσ των μονοπατιϊν όλων των κόμβων του κόμβου Μζςο μικοσ μονοπατιοφ είναι το πθλίκο του εςωτερικοφ μονοπατιοφ δια το πλικοσ των κόμβων
Δζντρα - Οριςμοί Ζνα δζντρο βακμοφ d και φψουσ h μπορεί να ζχει το πολφ Κόμβουσ. h 1 i 0 d i d d h 1 1 1
Δζντρα - Παράδειγμα
Κόμβοσ ενόσ δζντρου Δεδομζνα Δείκτεσ ςτα παιδιά Αναπαράςταςθ Κόμβου με Ν παιδιά P.Info P.child1 P.child2 P.childN
Δυαδικά δζντρα αναηθτθςθσ Σα δυαδικά δζντρα αναηιτθςθσ είναι διατεταγμζνα δζντρα. Διατεταγμζνο δζντρο λζγεται το δζντρο ςτο οποίο ζχει ςθμαςία θ διάταξθ των παιδιϊν κάκε κόμβου. Δζντρο αναηιτθςθσ είναι το δζντρο, του οποίου θ τιμι κάκε κόμβου είναι μεγαλφτερθ από τθν τιμι όλων των κόμβων του αριςτεροφ υπόδεντρου και μικρότερθ από τθν τιμι όλων των κόμβων το δεξιοφ υπόδεντρου.
Δυαδικά δζντρα αναηθτθςθσ Εγκυρα δυαδικά δζντρα
Δυαδικά δζντρα αναηθτθςθσ Μθ Εγκυρα δυαδικά δζντρα
Αναηιτθςθ κόμβου Για τθν εφρεςθ ενόσ κόμβο ςε δυαδικό δζντρο αναηιτθςθσ: Εξετάηουμε τθ ρίηα ςε ςχζςθ με το κλειδί αναηιτθςθσ Αν ο ηθτοφμενοσ κόμβοσ ζχει: μικρότερθ τιμι από τθ ρίηα ςυνεχίηουμε με το αριςτερό υπόδεντρο Μεγαλφτερθ τιμι από τθ ρίηα ςυνεχίηουμε με το δεξί υπόδεντρο Η αναηιτθςθ ςταματά αν βρεκεί ο ηθτοφμενοσ κόμβοσ ι φτάςουμε ςε κενό δείκτθ
Αναηιτθςθ κόμβου - Αλγόρικμοσ Αλγόριθμοσ Search-Node Δεδομζνα // Root,Key// P = Root found = false position = nil Όςο P nil και found == false Αν Key == P.info τότε found = false position = P αλλιώσ_αν K > P.info τότε P = P.right αλλιώσ P = P.left Τζλοσ_αν Τζλοσ_επανάληψησ Αποτελζςματα // found, position// Τζλοσ Search-Node
Αναηιτθςθ κόμβου Αναδρομικόσ υνάρτθςθ SearchNode2(Root,item) Αν (Root == nil) τότε Σερματιςμόσ Τζλοσ_αν Αν ( P.Info > item ) τότε SearchNode2( Root.right, item ) Τζλοσ_αν Αν ( P.Info < item ) τότε SearchNode2( Root.left, item ) Τζλοσ_αν Επιςτροφι Root Τζλοσ SearchItem2 Αλγόρικμοσ
Ειςαγωγι ι δθμιουργία κόμβου ε ζνα δζντρο αναηιτθςθσ οι νζοι κόμβοι εντάςςονται ωσ τερματικοί κόμβοι Αρχικά ακολουκείται θ διαδικαςία τθσ αναηιτθςθσ αναηθτϊντασ τον κόμβο που πρζπει να προςτεκεί. Ο κόμβοσ φυςικά δεν κα υπάρχει και κα βρεκεί ζνασ κενόσ δείκτθσ ο κόμβοσ προςτίκεται με τρόπο ϊςτε ο κενόσ δείκτθσ τϊρα κα δείχνει ς αυτόν
Ειςαγωγι ι δθμιουργία κόμβου Αλγόριθμοσ InsertNode Δεδομζνα // Root, item// /* Create new node*/ NewNode.Info = item NewNode.left=nil NewNode.right=nil P = Root Όςο P nil επανάλαβε previousnode = P Αν NewNode.Info > P.Info τότε P = P.right αλλιώσ P = P.left Τζλοσ_αν Τζλοσ_επανάληψησ Αν NewNode.Info > previousnode.info τότε previousnode.right = NewNode αλλιώσ previousnode.left = NewNode Τζλοσ_αν Τζλοσ InsertNode
Ειςαγωγι Κόμβου - Παράδειγμα