נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: עץ לא בינרי c#

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
גוני
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 21 August 2007 בשעה 17:35 | IP רשוּם
ציטוט גוני

שלום לכל אנשי התכנה
שאלתי היא פשוטה
חלק קטן מתכנית שאני עובד עליה ב c# הוא לעשות עץ שיכיל שורש ואז מספר לא מוגבלים של פריטים ברמה הראשונה וכמו כן מספר לא מוגבל של פריטים ברמה השניה וכו

משום מה אינני מצליח למצוא ברחבי הרשת הגדרות פשוטות ליצירת עץ

תודה לכל העונים מראש
חזרה לתחילת העמוד הצג את כרטיס החבר של גוני חפש הודעות אחרות של גוני בקר בדף הבית של גוני
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 21 August 2007 בשעה 20:20 | IP רשוּם
ציטוט shoshan

מזה בסגנון הזה:

עץ מוגדר בצורה רקורסיבית כערך ורשימה של תת-עצים.

הכל נראה מאוד פשוט ומצוחצח ב-c#

קוד:
class Tree<T>
{
    private T value;
    private List<Tree<T>> subTrees;

    public Tree(T value) : this(value, new Tree<T>[0]) { }

    public Tree(T value, Tree<T>[ ] subTrees)
    {
        this.value = value;
        this.subTrees = new List<Tree<T>>(subTrees);
    }

    public T Value
    {
        get { return value; }
        set { this.value = Value; }
    }

    public Tree<T> this[int index]
    {
        get
        {
            return subTrees[index];
        }
        set
        {
            subTrees[index] = value;
        }
    }

    public int subTreesCount
    {
        get { return subTrees.Count; }
    }

    public void AddSubTree(Tree<T> t, int index)
    {
        subTrees.Insert(index, t);
    }

    public void AddSubTree(T t, int index)
    {
        subTrees.Insert(index, new Tree<T>(t));
    }

    public void RemoveSubTree(int index)
    {
        subTrees.RemoveAt(index);
    }
}


וקוד שימוש לדוגמא יהיה

קוד:
static void Main(string[ ] args)
{
    Tree<string> t = new Tree<string>("root");
    t.AddSubTree(new Tree<string>("-child3"),0);
    t.AddSubTree("-child2",0);
    t.AddSubTree("-child1",0);
    t[1].AddSubTree("--chile1.3", 0);
    t[1].AddSubTree("--chile1.2",0);
    t[1].AddSubTree("--chile1.1", 0);

    PrintTree(t);
}

// should have probebly done this with a stack/queue/whatever and not with recursion...
private static void PrintTree(Tree<string> t)
{
    if ( t == null )
        return;
    Console.WriteLine(t.Value);
    for ( int i = 0 ; i < t.subTreesCount ; ++i )
        PrintTree(t[i]);
}


כמובן שזה מאוד פשוט רק כדי להבהיר עקרון, זה לממש לא נבנה לשימוש נורמאלי וזה מאוד מצומצם....


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה