Professional Documents
Culture Documents
DD05 Dendra 3
DD05 Dendra 3
Δεδομένων
V–3
Δένδρα –
Ασκήσεις
Ελένη Γαλιώτου
ΔΕΝΔΡΑ
ΠΑΡΑΔΕΙΓΜΑΤΑ - ΑΣΚΗΣΕΙΣ
1. ΑΝΑΔΡΟΜΙΚΗ ΔΙΑΣΧΙΣΗ ΔΕΝΔΡΟΥ
link l, r; {
(*visit) (h = QUEUEget());
};
if (h->l != NULL)
void QUEUEinit(int);
QUEUEput(h->l);
int QUEUEempty(void);
if (h->r != NULL)
void QUEUEput(link);
QUEUEput(h->r);
link QUEUEget(); }
}
4. ΜΕΤΑΔΙΑΤΕΤΑΓΜΕΝΗ ΔΙΑΣΧΙΣΗ (ΜΗ ΑΝΑΔΡΟΜΙΚΗ)
E D
B
/ \
A
D H *
/\ /\ *
B F C
*
/\ / \ *
A C G *
/\/\ /\ H
F
*
G
*
*
*
7. ΚΑΤΑΣΚΕΥΗ ΔΕΝΔΡΟΥ ΣΥΝΤΑΚΤΙΚΗΣ ΑΝΑΛΥΣΗΣ
Να γράψετε ένα πρόγραμμα το οποίο δημιουργεί ένα δένδρο συντακτικής
ανάλυσης από μία προθεματική παράσταση. Για λόγους απλούστευσης
θεωρούμε ότι οι όροι είναι μεμονωμένοι χαρακτήρες.
Κάθε κλήση της αναδρομικής συνάρτησης δημιουργεί ένα νέο κόμβο του
οποίου το γλωσσικό σημείο είναι ο επόμενος χαρακτήρας της εισόδου.
Αν το γλωσσικό σημείο είναι όρος, επιστρέφουμε τον νέο κόμβο.
Αν είναι τελεστής, ορίζουμε τον αριστερό και τον δεξιό δείκτη έτσι ώστε να
δείχνουν στο δένδρο που κατασκευάζεται (αναδρομικώς) για τα δύο ορίσματα.
*
+ f
a *
* +
b c d e
*+a**bc+def
char *a; link parse ()
typedef struct Tnode *link; { char t = a[i++];
struct Tnode { char token; link l, r }; link x = NEW ( t, NULL, NULL);
link NEW (char token, link l, r ) if ( ( t == ‘+’ ) || ( t ==‘*’ ) )
{ link x = malloc ( sizeof *x ); {
x -> token = token; x -> l = parse ();
x -> l = l; x-> r = parse ();
x -> r = r; }
return x; return x;
} }
8. ΜΕΤΡΗΣΗ ΦΥΛΛΩΝ ΔΕΝΔΡΩΝ