Πώς μπορείτε να μετατρέψετε Binary Tree σε δυαδική αναζήτηση Δέντρο με O (1) επιπλέον χώρο;
Δυαδικό δέντρο για να Binary Search Tree (BST)
Μετατρέποντας μια μη διατεταγμένη δυαδικό δέντρο σε ένα τακτοποιημένο δυαδικό δέντρο αναζήτησης είναι ασήμαντο, αλλά είναι λίγο πιο δύσκολο να το κάνουμε γρήγορα.
Εδώ είναι μια αφελής εφαρμογή που θα πρέπει να πληρούν τα κριτήρια σας, δεν θα περιγράψω τα πραγματικά βήματα για να λάβει, μόνο το συνολικό αλγόριθμο.
- Πιάσε ένα τυχαίο κόμβο φύλλο από το υπάρχον δέντρο σας
- Αποσύνδεση τον κόμβο φύλλο από το υπάρχον δέντρο σας
- Κάντε τον κόμβο της ρίζας των νέων δυαδικό δέντρο αναζήτησης σας
- Πιάσε ένα άλλο τυχαίο κόμβο φύλλο από το υπάρχον δέντρο σας
- Αποσύνδεση αυτόν τον κόμβο από την υπάρχουσα δέντρο σας
- Βρείτε το σωστό σημείο για, και να συνδέσει τον κόμβο, σε νέο δυαδικό δέντρο αναζήτησης σας
- Επαναλάβετε το βήμα 4-6 μέχρι το αρχικό δέντρο είναι άδειο
Θα πρέπει να απαιτεί μόνο λίγα μεταβλητές, όπως το μητρικό του κόμβο φύλλο είστε αποσύνδεση (εκτός των κόμβων έχει γονέα-συνδέσεις), η ρίζα τον κόμβο του νέου δέντρου, και μερικές προσωρινές μεταβλητές, όλα μέσα Ξ σας (1 ) κριτήρια χώρο.
Αυτό δεν θα παράγει ένα βέλτιστο δυαδικό δένδρο αναζήτησης. Για αυτό θα πρέπει είτε να ταξινομήσετε τους κόμβους πριν από την προσθήκη τους, και την προσθήκη τους με τη σωστή σειρά, ή να χρησιμοποιήσετε μια εξισορρόπηση δυαδικό δένδρο αναζήτησης, όπως το κόκκινο-μαύρο δέντρο ή ένα δέντρο άτεχνος.
Μετατροπή δυαδικού δένδρου σε διπλά συνδεδεμένη ΛΙΣΤΑ- μπορεί να γίνει επι τόπου σε O (n) Στη συνέχεια, το είδος χρησιμοποιώντας ταξινόμηση με συγχώνευση, nlogn Μετατρέψτε τον κατάλογο πίσω σε ένα δέντρο - O (n)
Απλή nlogn λύση.













