यह आप बाईं बच्चे की यात्रा करता है, तो वहाँ एक है, तो रूट नोड है, तो सही बच्चे में से आदेश ट्रावर्सल के लिए बहुत सीधे आगे है, अगली प्रविष्टि प्राप्त करने के लिए, इटरेटर के लिए 'nextEntry()', मैंने नीचे चिपकाए java.util.TreeMap
से स्निपेट को देखा। सादे अंग्रेजी में, मैं कहूंगा कि आप सुनिश्चित करते हैं कि रूट नोड शून्य नहीं है और फिर शून्य वापस आ जाए। यदि यह नहीं है, तो सही नोड को झुकाएं यदि यह शून्य नहीं है। फिर बाईं ओर जाएं (यदि शून्य नहीं है) और शून्य के मारने तक थोड़ी देर में उस समय के बाईं ओर जाएं। यदि मूल दाएं नोड शून्य है तो उसके बजाय, माता-पिता नोड पर जाएं यदि यह शून्य नहीं है। अब थोड़ी देर लूप दर्ज करें जहां आप माता-पिता को तब तक झुकाएं जब तक कि यह नल या नोड जो आप वर्तमान में देख रहे हों, उसके पास आपकी अंतिम स्थिति के बराबर सही (बच्चा) नोड है। अब जो भी प्रविष्टि आप बैठ रहे हैं उसे वापस करें। उन सभी विकल्पों को विफल करना, मूल (मूल) रूट नोड वापस करें। 'हैसनेक्स्ट()' केवल जांचता है कि क्या यह "अगली प्रविष्टि" आप वापस लौट रहे हैं या नहीं।
public final boolean hasNext() {
return next != null;
}
final TreeMap.Entry<K,V> nextEntry() {
TreeMap.Entry<K,V> e = next;
if (e == null || e.key == fenceKey)
throw new NoSuchElementException();
if (m.modCount != expectedModCount)
throw new ConcurrentModificationException();
next = successor(e);
lastReturned = e;
return e;
}
static <K,V> TreeMap.Entry<K,V> successor(Entry<K,V> t) {
if (t == null)
return null;
else if (t.right != null) {
Entry<K,V> p = t.right;
while (p.left != null)
p = p.left;
return p;
} else {
Entry<K,V> p = t.parent;
Entry<K,V> ch = t;
while (p != null && ch == p.right) {
ch = p;
p = p.parent;
}
return p;
}
}
स्रोत
2012-10-12 01:14:53
मुझे लगता है कि सवाल यह स्पष्ट है कि यदि आप जानते हैं कि बाइनरी पेड़ क्या है और उन्हें पार्सिंग का अनुभव है। – ilomambo
मुझे लगता है कि यह असली सवाल ठीक है। इसे शायद इसके बजाय बहुत व्यापक रूप से बंद कर दिया जाना चाहिए। –