Πώς μπορώ να εφαρμόσει ένα πολυμορφικό δυαδικό δέντρο αναζήτησης (που κάνει χρήση της EmptyTree και NonEmptyTree) χωρίς τη χρήση Downcasting ή κατηγορία έλεγχο;
java πολυμορφικό δυαδικό δένδρο αναζήτησης
Δημιουργήστε μια κοινή διεπαφή, όπως:
interface TreeNode<K, V> {
TreeNode<K, V> find(K key)
}
Στη συνέχεια, παρέχει μαθήματα που εφαρμόζουν την κοινή διεπαφή:
class EmptyTree<K, V> implements TreeNode<K, V> {
public TreeNode<K, V> find(K key) {
// ...
}
}
class NonEmptyTree<K, V> implements TreeNode<K, V> {
public TreeNode<K, V> find(K searchKey) {
// ...
}
}
την εφαρμογή σας για το EmptyTree θα δείξει πάντα μια αποτυχία στην αναζήτηση για το προϊόν (είτε επιστρέφοντας μηδενική ή ρίχνοντας μια εξαίρεση), ενώ η εφαρμογή σας NonEmptyTree θα είτε η ίδια επιστρέψουν (αν η προϋπόθεση αναζήτησης κλειδί αγώνες) ή να μεταβιβάσει προς τα αριστερά ή δεξιά υποδένδρων. Επειδή το αριστερό ή το δεξί υποδέντρο θα υπάρχουν πάντα (που θα είναι είτε ένα NonEmptyTree ή EmptyTree), η κατηγορία «NonEmptyTree» μπορεί απλά να αναφέρεται στα παιδιά της μέσω της κοινής διεπαφής και βασίζονται στο γεγονός ότι ο τύπος runtime θα κάνει το σωστό (έτσι δεν είναι απαραίτητο να κάνει οποιαδήποτε χύτευση ή το είδος ελέγχου των παιδιών για την εφαρμογή του αλγορίθμου).
Το μόνο μέρος όπου θα πρέπει να γνωρίζετε τον τύπο εκτέλεσης είναι όταν κατασκευάζουν τα παιδιά.













