سؤال

أطلب تنفيذ شجرة/رسم بياني حلقي موجه مثل هذا:

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 هو مجرد غلاف حول المفتاح وقيمة محتملة (ليس من الضروري أن تحتوي العقد على قيم محددة).
  • أحتاج إلى روابط لكل من الوالدين والأطفال.

هل هناك أي شيء في واجهات برمجة التطبيقات القياسية أو كومنز وما إلى ذلك من شأنه أن يفعل ذلك من أجلي؟

لا أمانع في كتابتها بنفسي (وأنا بالتأكيد لا أطلب منكم أيها الناس) أنا فقط لا أريد إعادة اختراع العجلة.

هل كانت مفيدة؟

المحلول

لا يبدو أن هناك أي شيء من هذا القبيل.انا سألت سؤال مماثل الأسبوع الماضي وانتهى الأمر بتنفيذ شجرتي الخاصة.كان تنفيذي مشابهًا جدًا لما تقترحه:

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;
    }
}

سيكون عليك إضافة رابط مرة أخرى إلى الوالدين.

نصائح أخرى

هناك ايضا http://www.jgrapht.org, ، والتي لديها برامج مرخصة بموجب LGPL.يجب أن أحذرك على الرغم من ذلك، فإن تنفيذ تطبيقك الخاص أمر محفوف بالمخاطر.إذا كنت تخطط لاستخدام العودية على البنية الخاصة بك (وهو رسم بياني)، فسيتعين عليك التأكد من أنها غير دورية، وإلا فسوف تواجه مشكلات حلقة لا نهائية.من الأفضل استخدام كود الطرف الثالث حيث تعاملوا بالفعل مع المشكلات.

أود أن أقول إنه من الأفضل أن تقوم بتنفيذ التنفيذ الخاص بك (إلى جانب أن لديك بالفعل واجهة مدروسة جيدًا).ما هي العمليات التي تخطط لإجرائها على هذه الشجرة على أي حال؟ربما ترغب في تصميم واجهة برمجة التطبيقات (API) الخاصة بك حول الأشياء التي تريدها...الوصول المباشر إلى العقد الفردية عن طريق المفتاح/القيمة؟أنواع العبور؟إضافة/إزالة العمليات؟

إذا كنت تبحث عن إمكانيات رسم بياني إضافية، JDigraphديغراف يجب أن يتناسب الفصل مع الفاتورة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top