मैं कैसे एक बहुरूपी द्विआधारी खोज वृक्ष को लागू कर सकते downcasting या वर्ग की जाँच का उपयोग किए बिना (कि EmptyTree और NonEmptyTree का उपयोग करता है)?
जावा बहुरूपी द्विआधारी खोज वृक्ष
एक आम इंटरफेस जैसे बनाएँ:
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 अपने क्रियान्वयन की या तो खुद को वापस आ जाएगी (यदि उपलब्ध खोज कुंजी मैचों) या बाईं ओर प्रतिनिधि या सही subtrees। क्योंकि बाएं या दाएं सबट्री हमेशा उपलब्ध नहीं होगा (यह या तो होगा एक NonEmptyTree या एक EmptyTree हो), "NonEmptyTree" वर्ग बस आम इंटरफ़ेस के माध्यम से अपने बच्चों को देखें और इस तथ्य पर भरोसा करते हैं कि क्रम प्रकार सही काम करेंगे कर सकते हैं (इस प्रकार यह एल्गोरिथ्म के कार्यान्वयन में बच्चों के किसी भी कास्टिंग या प्रकार की जाँच करने के लिए आवश्यक नहीं है)।
केवल जगह है जहाँ आप क्रम प्रकार पता करने की जरूरत है जब आप बच्चों का निर्माण है।













