2008-09-27 12 views
12

मैं इस तरह एक पेड़/निर्देशित अचक्रीय ग्राफ कार्यान्वयन कुछ की आवश्यकता होती है:ट्री (निर्देशित अचक्रीय ग्राफ) कार्यान्वयन

public class TreeNode<K, V> { 
    private K key; // 'key' for this node, always present 
    private V value; // 'value' for this node, doesn't have to be set 

    private TreeNode<K, V> parent; 
    private Set<TreeNode<K, V>> children; 
} 
  • वहाँ किसी भी तरह की कोई सॉर्टिंग है।
  • TreeNode कुंजी के चारों ओर सिर्फ एक रैपर है और एक संभावित मूल्य (नोड्स को मान सेट करने की आवश्यकता नहीं है)।
  • मुझे माता-पिता और बच्चों दोनों के लिए लिंक की आवश्यकता है।

क्या मानक एपीआई या कॉमन्स इत्यादि में कुछ भी है जो मेरे लिए यह करेगा?

मैं इसे अपने आप लेखन कोई आपत्ति नहीं है (और मैं निश्चित रूप से नहीं आप लोगों पूछ करने के लिए कर रहा हूँ) मैं तो बस नहीं पहिया फिर से आविष्कार करने के लिए चाहते हैं।

+2

सावधान रहें, एक पेड़ और एक निर्देशित विश्वकोश ग्राफ एक ही चीज नहीं है, निर्देशित विश्वकोश ग्राफ के लिए यह माता-पिता का हस्ताक्षर है: 'निजी सेट <ट्री नोड > चूंकि एक नोड में कई माता-पिता हो सकते हैं। – jolivier

उत्तर

11

इस तरह के कुछ भी प्रतीत नहीं होता है। मैंने पिछले सप्ताह a similar question से पूछा और अपने पेड़ को लागू करने के लिए समाप्त हो गया। मेरा कार्यान्वयन आप जो प्रस्तावित कर रहे हैं उसके समान ही था:

public class TreeNode<T> 
{ 
    private LinkedList<TreeNode<T>> children = new LinkedList<TreeNode<T>>(); 
    public T value { get; set; } 

    public TreeNode(T value) 
    { 
     this.value = value; 
    } 
    public LinkedList<TreeNode<T>> GetChildren() 
    { 
     return children; 
    } 
} 

आपको माता-पिता को एक लिंक वापस जोड़ना होगा।

1

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

0

यदि आप अतिरिक्त ग्राफ क्षमताओं की तलाश में हैं, JDigraph के Digraph कक्षा बिल को फिट करना चाहिए।

5

http://www.jgrapht.org भी है, जिसमें एलजीपीएल के तहत लाइसेंस प्राप्त सॉफ्टवेयर है। मुझे आपको चेतावनी देना है, हालांकि, अपना खुद का कार्यान्वयन खतरे से भरा हुआ है। यदि आप अपनी संरचना (जो एक ग्राफ है) पर रिकर्सन का उपयोग करने की योजना बनाते हैं, तो आपको यह सुनिश्चित करना होगा कि यह विश्वकोश है, या आप अनंत लूप समस्याओं में भाग लेंगे। तीसरे पक्ष के कोड का उपयोग करने के लिए बेहतर जहां उन्होंने पहले ही मुद्दों से निपटाया है।

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