יום רביעי, 5 במרץ 2014

פעולות / שיטות / פונקציות שימושיות בשפת סי שארפ c# #c

פעולות / שיטות / פונקציות שימושיות בשפת סי שארפ

 public static List<int> AllPath(BinTreeNode<int> t, int temp, List <int> L)
        {
            // טענת כניסה: פעולה מקבלת עץ, מספר שלם אפס, ורשימה אל
            // טענת יציאה הפעולה מחזירה את הסכום של כל המסלולים הקיימים בעץ
            if (t != null)
            {
                Console.WriteLine("hey");
                temp += t.GetInfo();
                if (t.GetLeft() == null && t.GetRight() == null)
                

                    L.Insert(null, temp);


                    AllPath(t.GetLeft(), temp, L);
                    AllPath(t.GetRight(), temp,L);
                
            }
            return L;
        }


זימון הפעולה

AllPath(p, 0,L);







שאלה עם תשובה

נגדיר פעולת "הוספה" על ערכי עץ בינארי באופן הבא:
אם לצומת יש שני בנים, מחליפים בין ערכי הצמתים של הבן הימני והשמאלי.
אם לצומת יש בן אחד, מוסיפים את הבן השני וערכו יהיה פי 2 מערך אחיו.

הפעולה מקבלת עץ בינארי bt של ערכים שלמים ומבצעת הוספה או שינוי של ערכיו לפי ההגדרה הנ"ל.


using System;
//using System.Collections.Generic;
using System.Linq;
using System.Text;
using Unit4.CollectionsLib;

namespace ConsoleApplication1
{
    class Program
    {
        //public bool HashPathSum(BinTreeNode<int> bt, int sum)
        //    {


        //   }


        public static void Adding(BinTreeNode<int> bt)
        {
          int x,y;
            if (bt != null) // אם העץ לא ריק בצע
            {
                if (bt.GetLeft() != null && bt.GetRight() != null) // אם לצומת אין בנים בצע
                {
                    x = bt.GetLeft().GetInfo(); // הכנס את המידע שמכיל הבן השמאלי לתוך איקס
                    y = bt.GetRight().GetInfo(); // הכנס את המידע שמכיל הבן הימני לתוך ווי


                    bt.GetLeft().SetInfo(y); // החלף את תוכן הבן השמאלי לווי
                    bt.GetRight().SetInfo(x); // החלף את תוכן הבן הימני לאיקס
                }


                if (bt.GetLeft() != null && bt.GetRight() == null) // אם לצומת אין בן שמאלי ויש בן ימני
                {
                    x = bt.GetLeft().GetInfo();  // הכנס את המידע שמכיל הבן השמאלי לתוך איקס



                    BinTreeNode<int> p = new BinTreeNode<int>(2 * x); // בונה שורש שמכיל את הערך של איקס כפול שתיים שהמצביע שלו הוא פי 
                    bt.SetRight(p); // תיצור לעץ הבינארי בן ימני שהמצביע שלו הוא פי

                }

                if (bt.GetLeft() == null && bt.GetRight() != null) // אם לצומת יש בן שמאלי ואין בן ימני
                {

                    y = bt.GetRight().GetInfo(); // הכנס את המידע שמכיל הבן הימני לתוך ווי



                    BinTreeNode<int> p = new BinTreeNode<int>(2 * y); // בונה שורש שמכיל את הערך של ווי כפול שתיים שהמצביע שלו הוא פי 
                    bt.SetLeft(p); // תיצור לעץ הבינארי בן שמאלי שהמצביע שלו הוא פי


                }
                Adding(bt.GetLeft()); // שולח לאותה תוכנית את הבן השמאלי
                Adding(bt.GetRight()); // שולח לאותה תוכנית את הבן הימניש

            }
   
        }

        public static bool HashPathSum(List<int> L, int sum)
        {
            Node<int> p = L.GetFirst();
            while (p != null)
            {
                if (p.GetInfo() == sum)
                    return true;
                p = p.GetNext();

            }
            return false;
        }


        static Random Num = new Random();
        static BinTreeNode<int> BuildT(int x)
        {
            int a;
            if (x < 0) return null;
            if (x == 0) return new BinTreeNode<int>(Num.Next(1, 21));
            if (x > 0)
            {
                a = Num.Next(1, 4);
                if (a == 1)
                    return new BinTreeNode<int>(null, Num.Next(1, 21), BuildT(x - 1));
                if (a == 2)
                    return new BinTreeNode<int>(BuildT(x - 1), Num.Next(1, 21), null);
                if (a == 3)
                    return new BinTreeNode<int>(BuildT(x - 1), Num.Next(1, 21), BuildT(x - 1));
            }
            return null;
        }
        static void Main(string[] args)
        {
            BinTreeNode<int> p = BuildT(3);
            BinTreeUtils.ShowTree(p);
            Adding(p);
            BinTreeUtils.ShowTree(p);

        }
    }
}











פעולה המקבלת עץ בינארי ומוסיפה אח לכל צומת שהוא בין יחד. ערך האח יהיה אפס

 public static void Adding(BinTreeNode<int> bt)
        {
       
            if (bt != null) // אם העץ לא ריק בצע
            {
           

                if (bt.GetLeft() != null && bt.GetRight() == null) // אם לצומת אין בן שמאלי ויש בן ימני
                {
                    // הכנס את המידע שמכיל הבן השמאלי לתוך איקס



                    BinTreeNode<int> p = new BinTreeNode<int>(0); // בונה שורש שמכיל את הערך אפס שהמצביע שלו הוא פי
                    bt.SetRight(p); // תיצור לעץ הבינארי בן ימני שהמצביע שלו הוא פי

                }

                if (bt.GetLeft() == null && bt.GetRight() != null) // אם לצומת יש בן שמאלי ואין בן ימני
                {





                    BinTreeNode<int> p = new BinTreeNode<int>(0);  // בונה שורש שמכיל את הערך אפס שהמצביע שלו הוא פי
                    bt.SetLeft(p); // תיצור לעץ הבינארי בן שמאלי שהמצביע שלו הוא פי


                }
                Adding(bt.GetLeft()); // שולח לאותה תוכנית את הבן השמאלי
                Adding(bt.GetRight()); // שולח לאותה תוכנית את הבן הימניש

            }

        }




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

        public static void update (BinTreeNode<int> bt)
        {
       
            if (bt != null) // אם העץ לא ריק בצע
            {
                if (bt.GetInfo() % 2 == 0) // אם תוכן העץ מתחלק בשתיים ללא שארית בצע
                {
                    bt.SetInfo(bt.GetInfo() / 2); // שנה את תוכן הצומת לתוכן הנוכחי חלקי שתיים
                }



                update(bt.GetLeft()); // שולח לאותה תוכנית את הבן השמאלי
                update(bt.GetRight()); // שולח לאותה תוכנית את הבן הימניש

            }

        }



הפעולה מחזירה את סך כל מספר הצמתים בעץ
 public static int count_zmatim (BinTreeNode<int> bt)
        {

            if (bt == null) return 0;
            {
             
               return 1+ count_zmatim(bt.GetLeft())+count_zmatim (bt.GetRight());

            }

        }








פעולה המחזירה את מספר הצמתים בעץ שיש להם תוכן זוגי

  public static int zugi (BinTreeNode<int> bt)
        {

            if (bt == null) return 0;
            {
                if (bt.GetInfo() % 2 == 0) // אם תוכן העץ מתחלק בשתיים ללא שארית בצע
                {
               return 1+ zugi(bt.GetLeft())+zugi (bt.GetRight());
                }


                return zugi(bt.GetLeft()) + zugi(bt.GetRight());
            }

        }





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

     public static int sum_right_child (BinTreeNode<int> bt)
        {

            if (bt == null) return 0;
            if (bt.GetRight() != null)
         
                return bt.GetRight().GetInfo() + sum_right_child(bt.GetLeft()) + sum_right_child(bt.GetRight());

            return sum_right_child (bt.GetLeft());

        }





טענת כניסה: הפעולה מקבלת עץ בינארי ומספר שלם
טענת יציאה: הפעולה מחזירה אמת אם המספר המספר השלם שהפעולה מקבלת קיים בץ, אחרת שקר

 public static bool is_num_exist (BinTreeNode<int> bt, int x)
        {

            if (bt == null) return false;

            if (bt.GetInfo() == x) return true;

            return is_num_exist (bt.GetLeft(),x) || is_num_exist(bt.GetRight(),x);

        }

אין תגובות:

הוסף רשומת תגובה