Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου"— Μεταγράφημα παρουσίασης:

1 ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος (maistros@cs.ntua.gr) Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr) http://www.softlab.ntua.gr/~nickie/Courses/progtech/ 1Νίκος ΠαπασπύρουΠρογραμματιστικές Τεχνικές Διαφάνειες παρουσίασης #8 (α) 4 Δυαδικά δένδρα 4 Ισοζυγισμένα δυαδικά δένδρα

2 2Νίκος ΠαπασπύρουΠρογραμματιστικές Τεχνικές Δυαδικά δένδρα(i) u Binary trees u Δυο σύνδεσμοι σε κάθε κόμβο l αριστερό και δεξί παιδί u Κάθε κόμβος έχει 0, 1 ή 2 παιδιά u Ρίζα: ο αρχικός κόμβος του δένδρου u Φύλλα: κόμβοι χωρίς παιδιά u Βάθος κόμβου: αριθμός συνδέσμων από τη ρίζα

3 3Νίκος ΠαπασπύρουΠρογραμματιστικές Τεχνικές Δυαδικά δένδρα(ii) u Τύπος κόμβου TreeNode typedef struct TreeNode_tag { int data; struct TreeNode_tag * left; struct TreeNode_tag * right; } TreeNode; u Τύπος tree typedef TreeNode * tree; u Κενό δένδρο const tree treeEmpty = NULL;

4 4Νίκος ΠαπασπύρουΠρογραμματιστικές Τεχνικές Δυαδικά δένδρα(iii) u Εισαγωγή σε δένδρα l Καθοριστική απόφαση: σε ποιο σημείο του δένδρου θα εισαχθεί ο νέος κόμβος l Ισοζυγισμένα δένδρα (balanced trees): το βάθος δυο φύλλων διαφέρει το πολύ κατά 1 u Συνάρτηση μέγιστου βάθους int treeDepth (tree t) { if (t == NULL) return 0; return 1 + max(treeDepth(t->left), treeDepth(t->right)); }

5 5Νίκος ΠαπασπύρουΠρογραμματιστικές Τεχνικές Δυαδικά δένδρα(iv) u Εισαγωγή σε ισοζυγισμένα δένδρα void treeBalancedInsert (tree * t, int d) { if (*t == NULL) { *t = (TreeNode *) malloc(sizeof(TreeNode)); if (*t == NULL) { printf("Out of memory\n"); exit(1); } (*t)->data = d; (*t)->left = (*t)->right = NULL; }

6 6Νίκος ΠαπασπύρουΠρογραμματιστικές Τεχνικές Δυαδικά δένδρα(v) u Εισαγωγή σε ισοζυγισμένα δένδρα (συνέχεια) else { int d1 = treeDepth((*t)->left); int d2 = treeDepth((*t)->right); if (d1 <= d2) treeBalancedInsert( &((*t)->left), d); else treeBalancedInsert( &((*t)->right), d); } }


Κατέβασμα ppt "ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google