Esempio n. 1
0
 public void Run(PointTree <Trial> t)
 {
     if (t != null)
     {
         Run(t.left);  //переход к левому поддереву
         Run(t.right); //переход к правому поддереву
     }
 }
Esempio n. 2
0
 public int TreeDeep(PointTree <Trial> root)
 {
     if (root == null)
     {
         return(0);
     }
     else
     {
         return(1 + Math.Max(TreeDeep(root.left), TreeDeep(root.right)));
     }
 }
Esempio n. 3
0
        public static void BinaryTreeMenu()
        {
            PointTree <Trial> root = new PointTree <Trial>(new Trial(rnd.Next(1, 30), rnd.Next(1, 12), rnd.Next(0, 10)));
            Tree <Trial>      tr   = new Tree <Trial>(root);

            root = tr.IdealTree(15, root, rnd);
            int choice = -1;

            while (choice != 5)
            {
                Console.WriteLine("1. Печать");
                Console.WriteLine("2. Найти высоту дерева");
                Console.WriteLine("3. Преобразовать в дерево поиска");
                Console.WriteLine("4. Удалить из памяти");
                Console.WriteLine("5. Назад");

                bool ok = int.TryParse(Console.ReadLine(), out choice);
                if (!ok)
                {
                    do
                    {
                        Console.WriteLine("Проверьте правильность ввода");
                        ok = int.TryParse(Console.ReadLine(), out choice);
                    } while (!ok || choice < 0 || choice > 5);
                }
                switch (choice)
                {
                case 1:
                    tr.ShowTree(root, 3);
                    break;

                case 2:
                    Console.WriteLine("Высота дерева = " + tr.TreeDeep(root));
                    break;

                case 3:
                    PointTree <Trial> searchTree = tr.first(root.Data);
                    tr.MakeSearch(root, searchTree);
                    root = searchTree;
                    tr.ShowTree(root, 3);
                    break;

                case 4:
                    tr = null;
                    Console.WriteLine("Удаление выполнено");
                    break;

                case 5:
                    choice = 5;
                    Console.Clear();
                    break;
                }
            }
        }
Esempio n. 4
0
 /*рекурсивная функция для печати дерева по уровням с обходом слева направо*/
 public void ShowTree(PointTree <Trial> p, int l)
 {
     if (p != null)
     {
         ShowTree(p.left, l + 5); //переход к левому поддереву
                                  //формирование отступа
         for (int i = 0; i < l; i++)
         {
             Console.Write(" ");
         }
         Console.WriteLine(p.Data); //печать узла
         ShowTree(p.right, l + 5);  //переход к правому поддереву
     }
 }
Esempio n. 5
0
        public PointTree <Trial> MakeFirstTree()
        {
            Random            rnd  = new Random();
            PointTree <Trial> root = first(new Trial(rnd.Next(1, 30), rnd.Next(1, 12), rnd.Next(0, 10)));

            Add(root, new Trial(rnd.Next(1, 30), rnd.Next(1, 12), rnd.Next(0, 10)));
            Add(root, new Trial(rnd.Next(1, 30), rnd.Next(1, 12), rnd.Next(0, 10)));
            Add(root, new Trial(rnd.Next(1, 30), rnd.Next(1, 12), rnd.Next(0, 10)));
            Add(root, new Trial(rnd.Next(1, 30), rnd.Next(1, 12), rnd.Next(0, 10)));
            Add(root, new Trial(rnd.Next(1, 30), rnd.Next(1, 12), rnd.Next(0, 10)));
            Add(root, new Trial(rnd.Next(1, 30), rnd.Next(1, 12), rnd.Next(0, 10)));
            Add(root, new Trial(rnd.Next(1, 30), rnd.Next(1, 12), rnd.Next(0, 10)));
            Add(root, new Trial(rnd.Next(1, 30), rnd.Next(1, 12), rnd.Next(0, 10)));
            return(root);
        }
Esempio n. 6
0
        //добавление элемента d в дерево поиска
        public PointTree <Trial> Add(PointTree <Trial> root, Trial trial)
        {
            PointTree <Trial> p = root; //корень дерева
            PointTree <Trial> r = null;
            //флаг для проверки существования элемента d в дереве
            bool ok = false;

            while (p != null && !ok)
            {
                r = p;
                //элемент уже существует
                if (trial == p.Data)
                {
                    ok = true;
                }
                else
                if (trial.Mark < p.Data.Mark)
                {
                    p = p.left;                       //пойти в левое поддерево
                }
                else
                {
                    p = p.right;  //пойти в правое поддерево
                }
            }
            if (ok)
            {
                return(p);   //найдено, не добавляем
            }
            //создаем узел
            PointTree <Trial> NewPoint = new PointTree <Trial>(trial);//выделили память

            // если d<r.key, то добавляем его в левое поддерево
            if (trial.Mark < r.Data.Mark)
            {
                r.left = NewPoint;
            }
            // если d>r.key, то добавляем его в правое поддерево
            else
            {
                r.right = NewPoint;
            }
            return(NewPoint);
        }
Esempio n. 7
0
        //построение идеально сбалансированного дерева
        public PointTree <Trial> IdealTree(int size, PointTree <Trial> root, Random rnd)
        {
            PointTree <Trial> r;
            int nl, nr;

            if (size == 0)
            {
                root = null;
                return(root);
            }
            nl = size / 2;
            nr = size - nl - 1;
            r  = new PointTree <Trial>(new Trial(rnd.Next(1, 30), rnd.Next(1, 12), rnd.Next(0, 10)));
            for (int i = 0; i < size; i++)
            {
                r.left  = IdealTree(nl, r.left, rnd);
                r.right = IdealTree(nr, r.right, rnd);
            }
            return(r);
        }
Esempio n. 8
0
        public PointTree <Trial> first(Trial tr)
        {
            PointTree <Trial> t = new PointTree <Trial>(tr);

            return(t);
        }
Esempio n. 9
0
 public Tree(PointTree <Trial> t)
 {
     Root = t;
 }
Esempio n. 10
0
 public Tree()
 {
     Root = null;
 }
Esempio n. 11
0
 public PointTree(Trial t)
 {
     Data  = t;
     left  = null;
     right = null;
 }
Esempio n. 12
0
                      right; //адрес правого поддерева
 public PointTree()
 {
     Data  = null;
     left  = null;
     right = null;
 }