2011-02-12 8 views
5

मैं वर्तमान में 2 डी रेंज ट्री लागू कर रहा हूं। मुझे अपने नोड वर्ग के लिए एक व्यावहारिक मॉडल (जावा में) के साथ आने में परेशानी हो रही है।एक श्रेणी में एक नोड मॉडलिंग

पेड़ में एक नोड में निम्न में से कोई भी हो सकता है: मिड्रेंज मान, दाएं और बाएं बच्चे सूचक, उप-डेटा, डेटा सूचक और/या पिछले और अगले पॉइंटर्स।

मैं बस की मध्यम-मान के साथ तीन अलग-अलग तार्किक टुकड़े

  • क) नोड में नोड से टूट गया है - प्रत्येक नोड एक मध्यम-श्रेणी
  • ख) छोड़ दिया, सही और सबट्री अंकों के साथ नोड है। यह एक गैर पत्ती नोड का प्रतिनिधित्व करता है।
  • सी) अगला, पिछला और डेटा पॉइंटर्स के साथ नहीं। यह एक पत्ता नोड का प्रतिनिधित्व करता है।

मैंने समग्र और सजावटी पैटर्न लागू करने का प्रयास किया, लेकिन इसका कोई फायदा नहीं हुआ।

  1. नोड इंटरफेस के लिए सभी संभव getters/setters, यानी साथ: getMidRange, getLeft, GetRight, setLeft, setRight, आदि ...
  2. दो वर्गों इंटरफ़ेस को लागू करने के बाद: Node2D और LinkedNode मैं बनाने की कोशिश की (पर्ण्सन्धि)। नोड 2 डी ने लिंक को अगले और पिछले लिंक को छोड़कर सबकुछ किया। जबकि LinkedNode केवल अगले और पिछले के लिए लिंक रखे।

यह इस तरह काम करता है, लेकिन अगर मैं वर्गों के एक समूह के रूप में इसे मॉडलिंग करने का एक अच्छा तरीका है तो मैं घूम रहा था?

संपादित करें: रेंज ट्री (छोटी जानकारी): रेंज पेड़ में - सभी डेटा लीफ नोड्स में संग्रहीत होते हैं, और पेड़ हमेशा संतुलित होता है। इसके अलावा सभी पत्ते एक ही ऊंचाई पर हैं। इसके अलावा, पत्तियों को क्रमबद्ध किया जाता है, और एक दोगुनी लिंक्ड सूची द्वारा एक साथ जोड़ा जाता है। आखिरी, लेकिन कम से कम नहीं, प्रत्येक गैर-पत्ती नोड में एक उप-ट्री है - जो एक रेंज पेड़ भी है, लेकिन पत्तियों के साथ अगली विशेषता पर क्रमबद्ध होता है (y कहें यदि मूल पेड़ x पर सॉर्ट किया गया था)।

RangeTreeBreakdown

+1

नोड्स पत्ती और गैर पत्ती स्थिति के बीच स्विच नहीं है, तो के रूप में संरचना विकसित होता है, मैं बी और सी अपने दो ठोस उपवर्गों जा रहा है के साथ एक से बाहर एक अमूर्त वर्ग बनाने के लिए परीक्षा की जाएगी। यदि, एक द्विआधारी खोज पेड़ के रूप में, एक नोड एक पत्ता है क्योंकि वर्तमान में इसमें कोई बच्चा नहीं है लेकिन बाद में बच्चे मिल सकते हैं, मैं एक वर्ग का उपयोग करूंगा। मुझे कोई सार्थक पैटर्न नहीं दिख रहा है क्योंकि कोई इंटरैक्शन नहीं है, लेकिन मैं रेंज पेड़ से परिचित नहीं हूं। –

+0

हां, नोड पत्ते से गैर पत्ते तक नहीं जाते हैं। सभी डेटा पत्तियों में संग्रहित है। इसके बारे में क्षमा करें, मैं सवाल संपादित करूंगा। – drozzy

उत्तर

1
abstract class AbstractNode { 
    int midRange; 
} 

class InnerNode extends AbstractNode { 
    AbstractNode left; 
    AbstractNode right; 
    AbstractNode subtree; 
} 

class LeafNode extends AbstractNode { 
    LeafNode next; 
    LeafNode prev; 
    Object data; 
} 
+0

ऐसा लगता है कि मैंने क्या किया था (लेकिन डेटा के लिए सामान्य प्रकार के साथ)। @drozzy, क्या इसमें कोई समस्या है? –

+0

नहीं, मुझे लगता है कि यह काम करेगा। इसके बारे में जाने के कई तरीके हैं, और मुझे लगता है कि यह बहुत संदर्भ विशिष्ट है। – drozzy