मैं अलग द्विआधारी खोज वृक्ष कार्यान्वयन का एक समूह हाल ही में (AVL, टेढ़ा, treap) कोडिंग किया गया है और उत्सुक हूँ हो, तो एक विशेष रूप से अच्छा जिस तरह से इन संरचनाओं को पार करने वाले पुनरावर्तक लिखने के लिए। समाधान मैं अभी का उपयोग किया है पेड़ है, जो एक मानक लिंक्ड सूची यात्रा के लिए यात्रा को कम कर देता में अगले और पिछले तत्वों को BST दुकान संकेत में प्रत्येक नोड है। हालांकि, मैं वास्तव में इस उत्तर से संतुष्ट नहीं हूँ। यह दो संकेत (अगले और पिछले) द्वारा प्रत्येक नोड के स्थान उपयोग बढ़ जाती है, और कुछ अर्थों में यह सिर्फ धोखा दे रहा है।
मैं एक द्विआधारी खोज वृक्ष इटरेटर एक ढेर का उपयोग कर सीमा नोड्स का ट्रैक रखने के बाद में पता लगाने के लिए द्वारा हे (ज) सहायक भंडारण स्थान (जहां ज पेड़ की ऊंचाई है) का उपयोग करता है के निर्माण के लिए एक रास्ता के बारे में पता है, लेकिन मैं स्मृति के उपयोग की वजह से इस कोडिंग का विरोध किया है। मुझे उम्मीद थी वहाँ किसी तरह पुनरावर्तक केवल निरंतर अंतरिक्ष का उपयोग करता है का निर्माण करना है।
मेरा प्रश्न यह है - वहाँ निम्नलिखित गुणों के साथ एक द्विआधारी खोज वृक्ष के ऊपर एक इटरेटर डिजाइन करने के लिए एक तरीका है?
- तत्वों आरोही क्रम में दौरा कर रहे हैं (यानी एक inorder ट्रावर्सल)
next()औरhasNext()प्रश्नों हे (1) समय में चलाते हैं।- स्मृति के उपयोग हे है (1)
यह आसान बनाने के लिए, यह ठीक है अगर आप को लगता है कि वृक्ष संरचना यात्रा (यानी कोई सम्मिलन, हटाए जाने, या रोटेशन) के दौरान आकार बदल रहा है नहीं है, लेकिन अगर वहाँ एक समाधान है कि वास्तव में इस संभाल सकता था यह बहुत अच्छा होगा।













