Пример #1
0
 //Подсчет кол-ва листьев
 public static void LeavesCount(PointTree p, ref int rez)
 {
     if (p != null)
     {
         LeavesCount(p.Left, ref rez);
         if (p.Left == null && p.Right == null)
         {
             rez++;
         }
         LeavesCount(p.Right, ref rez);
     }
 }
Пример #2
0
 //печать дерева по уровням
 private static void ShowTree(PointTree p, int l)
 {
     if (p != null)
     {
         ShowTree(p.Right, l + 3); //переход к левому поддереву
         for (var i = 0; i < l; i++)
         {
             Console.Write(" ");
         }
         Console.WriteLine(p.Data);
         ShowTree(p.Left, l + 3); //переход к правому поддереву
     }
 }
Пример #3
0
        //Преобразование идеального дерева в дерево поиска
        private static PointTree CreateSortTree(PointTree root, PointTree sortTree)
        {
            if (root != null)
            {
                CreateSortTree(root.Left, sortTree);
                if (root.Data != " ")
                {
                    sortTree = Add(sortTree, root.Data);
                }
                CreateSortTree(root.Right, sortTree);
            }

            return(sortTree);
        }
Пример #4
0
        //Добавление элемента к дереву
        private static PointTree Add(PointTree root, string d)
        {
            var       p = root; //корень дерева
            PointTree r = null;
            //флаг для проверки существования элемента d в дереве
            var ok = false;

            while (p != null && !ok)
            {
                r = p;
                if (d.CompareTo(p.Data) == 0)
                {
                    ok = true; //элемент уже существует
                }
                else if (d.CompareTo(p.Data) == -1)
                {
                    p = p.Left; //пойти в левое поддерево
                }
                else
                {
                    p = p.Right; //пойти в правое поддерево
                }
            }

            if (ok)
            {
                return(root); //найдено, не добавляем
            }
            //создаем узел
            var newPoint = new PointTree(d); //выделили память

            // если d<r->key, то добавляем его в левое поддерево
            if (d.CompareTo(r.Data) == -1)
            {
                r.Left = newPoint;
            }
            // если d>r->key, то добавляем его в правое поддерево
            else
            {
                r.Right = newPoint;
            }
            return(root);
        }
Пример #5
0
        //построение идеально сбалансированного дерева с клавиатуры
        private static PointTree IdealTree(int size, PointTree p)
        {
            PointTree r;
            int       nl, nr;

            if (size == 0)
            {
                p = null;
                return(p);
            }

            nl = size / 2;
            nr = size - nl - 1;
            Console.WriteLine("Read string Tree element: ");
            var d = Console.ReadLine();

            r       = new PointTree(d);
            r.Left  = IdealTree(nl, r.Left);
            r.Right = IdealTree(nr, r.Right);
            p       = r;
            return(p);
        }
Пример #6
0
 public PointTree(string d)
 {
     Data  = d;
     Left  = null;
     Right = null;
 }
Пример #7
0
                         Right; //адрес правого поддерева

        public PointTree()
        {
            Data  = "";
            Left  = null;
            Right = null;
        }
Пример #8
0
        //Задание 3.Найти кол-во листьев в дереве

        #region taskThree

        //Функция объединения
        private static void NumberLeaves()
        {
            var exit         = false;
            var root         = new PointTree();
            var rootSorttree = new PointTree();
            int sizeTree;
            var k = 3;

            while (!exit)
            {
                var sw = Print.Menu(k, Index[15], Index[16], Index[17], Index[14], Index[3]);
                switch (sw)
                {
                case 1:

                    Console.WriteLine("Read size of ideal tree: ");
                    sizeTree = ReadLib.ReadLib.ReadVGran(0);
                    if (sizeTree == 0)
                    {
                        Console.WriteLine("Error! The tree is empty");
                    }
                    else
                    {
                        root = IdealTree(sizeTree, root);
                        k    = 0;
                    }

                    Console.WriteLine(Index[8]);
                    Console.ReadLine();
                    break;


                case 2:
                    var count = 0;
                    LeavesCount(root, ref count);
                    Console.WriteLine("Number of leaves:" + count);
                    Console.WriteLine(Index[8]);
                    Console.ReadLine();
                    break;


                case 3:
                    root = CreateSortTree(root, rootSorttree);
                    ShowTree(root, 3);
                    Console.WriteLine(Index[8]);
                    Console.ReadLine();
                    break;


                case 4:
                    ShowTree(root, 3);
                    Console.WriteLine(Index[8]);
                    Console.ReadLine();
                    break;


                case 5:
                    exit = true;
                    break;
                }
            }
        }