2008-12-03 17 views
5

मुझे बताया गया है कि जावा क्लास ट्रीमैप आरबी पेड़ के कार्यान्वयन का उपयोग करता है। यदि ऐसा है, तो कोई ट्रीमैप पर एक इनऑर्डर, प्रीऑर्डर और पोस्टऑर्डर पेड़-पैदल कैसे करता है?जावा ट्रीमैप सॉर्टिंग विकल्प?

या यह संभव नहीं है?

उत्तर

6

आप संग्रह पुस्तकालय में लागू वृक्षारोपण के साथ ऐसा करने में सक्षम नहीं होंगे। जावा में Red-Black Tree का कार्यान्वयन यहां दिया गया है जिसे आप देख सकते हैं। printTree() विधियों को देखें कि वे क्रमबद्ध क्रम में पेड़ कैसे चलते हैं।

/** 
* Print all items. 
*/ 
public void printTree() { 
    printTree(header.right); 
} 

/** 
* Internal method to print a subtree in sorted order. 
* @param t the node that roots the tree. 
*/ 
private void printTree(RedBlackNode t) { 
    if(t != nullNode) { 
     printTree(t.left); 
     System.out.println(t.element); 
     printTree(t.right); 
    } 
} 

इससे आप तीनों ऑर्डर में पेड़ को पार करने के लिए अपने तरीके लिख सकते हैं।

3

AFAIK TreeSet/TreeMap कक्षाएं वास्तव में उनके किसी भी आंतरिक का पर्दाफाश नहीं करती हैं और केवल सेट/मानचित्र इंटरफ़ेस के अनुरूप होती हैं। इटेटरेटर केवल आरोही क्रम में जाने की गारंटी है।

मैं थोड़ा नाराज हूं कि आप इन नोड्स को इनऑर्डर में क्यों स्कैन करना चाहते हैं क्योंकि इन पेड़ों के लक्ष्य वस्तुओं (जैसे गणित सूत्र) के बीच संबंधों का प्रतिनिधित्व नहीं करना है बल्कि बस उन सभी को स्टोर करना है। उन्हें कुशलता से पुनर्प्राप्त करें।

+0

यह एप्लिकेशन की तुलना में सिद्धांत का एक प्रश्न है। – kylex

+0

हाय @ यूरी, आरबी पेड़ हमेशा संतुलन बनाए रखते हैं जो भी चाबियाँ डाली जाती हैं, है ना? तो क्या यह मानना ​​सही है कि अगर हम ट्रिगैप में कुंजियों को एक अपरिवर्तनीय फैशन में डालते हैं, तो खोज और सम्मिलित समय 'ओ (लॉग एन)' होगा? – SexyBeast

3

आपको कम से कम इटरेटर और का उपयोग कर inorder की पैदल दूरी पर कर सकते हैं प्रत्येक पाश के लिए एक: तो अग्रिम आदेश जावा पेड़ यांत्रिकी के किसी भी खुलासा नहीं करता,:

void inOrderWalk(TreeMap<K,V> treeMap) { 
    //this will loop through the values in the map in sorted order (inorder traversal) 
    for (Map.Entry<K,V> entry : treeMap.entrySet() { 
     V value = entry.getValue(); 
     K key = entry.getKey() 
    } 
} 

हालांकि, अन्य पोस्टर सही कह रहे हैं या इस दृश्य में पोस्टरॉर्डर संभव नहीं है।

संबंधित मुद्दे