Bst
Ένα δυαδικό δέντρο αναζήτησης είναι ένα δέντρο στο οποίο κάθε κόμβος έχει το πολύ δύο κόμβους-παιδιά (ένα αριστερό και ένα δεξιό παιδί-υποδέντρο).
Κάθε κόμβος έχει έναν ακέραιο γραμμένο μέσα του.
Εάν ο αριθμός είναι γραμμένος μέσα σε έναν κόμβο, τότε οι αριθμοί στο αριστερό υποδέντρο του είναι μικρότεροι από το και οι αριθμοί στο δεξί του υποδέντρο είναι μεγαλύτεροι από το .
Θα σας δοθεί μια ακολουθία ακεραίων μεταξύ και (κλειστό διάστημα ) έτσι ώστε κάθε αριθμός να εμφανίζεται στην ακολουθία ακριβώς μια φορά.
Πρέπει να δημιουργήσετε ένα δυαδικό δέντρο αναζήτησης από την ακολουθία, βάζοντας τον πρώτο
αριθμό στον κόμβο-ρίζα και εισάγοντας κάθε άλλο αριθμό με τη σειρά.
Με άλλα λόγια, εκτελέστε το insert(, ρίζα) για κάθε άλλο αριθμό:
insert (αριθμός , κόμβος )
αυξήστε τον μετρητή κατά
αν ο είναι μικρότερος από τον αριθμό στον κόμβο
αν ο δεν έχει αριστερό παιδί
δημιουργήστε έναν νέο κόμβο με τον αριθμό και ορίστε τον ως το αριστερό παιδί του κόμβου
αλλιώς
insert(, αριστερό παιδί του κόμβου )
αλλιώς (ο είναι μεγαλύτερος από τον αριθμό στον κόμβο )
αν ο δεν έχει δεξί παιδί
δημιουργήστε έναν νέο κόμβο με τον αριθμό και ορίστε τον ως το δεξί παιδί του κόμβου
αλλιώς
insert(, δεξί παιδί του κόμβου )
Γράψτε ένα πρόγραμμα που να υπολογίζει την τιμή του μετρητή μετά από κάθε εισαγωγή αριθμού. Ο μετρητής είναι αρχικά .
Είσοδος
Η πρώτη γραμμή περιέχει τον ακέραιο αριθμό , το μήκος της ακολουθίας.
Οι υπόλοιπες γραμμές περιέχουν τους αριθμούς στην ακολουθία, ακέραιους στο διάστημα .
Οι αριθμοί θα είναι διακριτοί.
Έξοδος
Τυπώστε ακέραιους αριθμούς τον καθένα στη δική του γραμμή, τις τιμές του μετρητή μετά από κάθε εισαγωγή αριθμού στο δέντρο.
Βαθμολογία
Στα αρχεία ελέγχου αξίας των πόντων, το θα είναι το πολύ .
Παραδείγματα
input
4
1
2
3
4
output
0
1
3
6
input
5
3
2
4
1
5
output
0
1
2
4
6
input
8
3
5
1
6
8
7
2
4
output
0
1
2
4
7
11
13
15
Comments