Οδηγός Μελέτης - Εισαγωγή στον Προγραμματισμό

Α22.4 · Διασχίσεις pre-order, in-order, post-order

Διαλέξεις 21–22: Δέντρα, διαφάνειες 22–28 (διάλεξη 21: διαφάνειες 44–50) · Δυσκολία ★☆☆ · trace · Κεφάλαια: 22, 21

Δίνεται το δέντρο με ρίζα το 5· τα παιδιά του 5 είναι το 7 (αριστερά) και το 1 (δεξιά), και τα παιδιά του 7 είναι το 2 (αριστερά) και το 9 (δεξιά).

flowchart TD
  N5(("5")) --> N7(("7"))
  N5 --> N1(("1"))
  N7 --> N2(("2"))
  N7 --> N9(("9"))

Τι τυπώνει καθεμία από τις παρακάτω εκδοχές της print όταν καλείται με τη ρίζα;

void print(Tree t) {       /* Pre-order */
  if (t == NULL) return;
  printf("%d ", t->value);
  print(t->left);
  print(t->right);
}
void print(Tree t) {       /* In-order */
  if (t == NULL) return;
  print(t->left);
  printf("%d ", t->value);
  print(t->right);
}
void print(Tree t) {       /* Post-order */
  if (t == NULL) return;
  print(t->left);
  print(t->right);
  printf("%d ", t->value);
}

Υπόδειξη

Εφαρμόστε τον ορισμό αναδρομικά, ξεκινώντας από τη ρίζα: η διάσχιση του 5 αποτελείται από τη διάσχιση του υποδέντρου του 7, τη διάσχιση του υποδέντρου του 1 και το ίδιο το 5, με τη σειρά που ορίζει η θέση του printf.

Αριθμός στον οδηγό: Α22.4 (στο κεφάλαιο) · Μόνιμο αναγνωριστικό: slides-lec22-traversals · Σύνδεσμος: https://progintro.github.io/study/questions/slides/slides-lec22-traversals.html · Markdown (GitHub)