Ejemplo n.º 1
0
        /// <summary>
        /// Печать Дерева (идеальное/поиска)
        /// </summary>
        /// <param name="node">Текущая вершина дерева</param>
        /// <param name="left">Отступ от левого края</param>
        /// <param name="top">Отступ Сверху</param>
        /// <param name="offset">Длина ветки ("Смещение")</param>
        static void ShowTree(BinarTreeNode node, int left, int top, int offset = 20)
        {
            if (node != null)
            {
                Console.SetCursorPosition(left, top);
                Console.Write(node.Data);

                if (node.left != null)
                {
                    Console.SetCursorPosition(left - offset, top);
                    Console.Write(DupLicate("━", offset));

                    Console.SetCursorPosition(left - offset, top);
                    Console.Write("┏");
                    ShowTree(node.left, left - offset, top + 1, offset / 2);//переход к левому поддереву
                }

                if (node.right != null)
                {
                    Console.SetCursorPosition(left + node.Data.ToString().Length, top);
                    Console.Write(DupLicate("━", offset));

                    Console.SetCursorPosition(left + offset + node.Data.ToString().Length - 1, top);
                    Console.Write("┓");
                    ShowTree(node.right, left + offset, top + 1, offset / 2);//переход к правому поддереву
                }

                if (top > maxTop)
                {
                    maxTop = top;
                }
            }
        }
Ejemplo n.º 2
0
 private static void GenerateSearchTree(BinarTreeNode idealTreeRoot, ref BinarTreeNode searchTreeRoot)
 {
     if (idealTreeRoot != null)
     {
         Add(ref searchTreeRoot, idealTreeRoot.Data);
         GenerateSearchTree(idealTreeRoot.left, ref searchTreeRoot);  //переход к левому поддереву
         GenerateSearchTree(idealTreeRoot.right, ref searchTreeRoot); //переход к правому поддереву
     }
 }
Ejemplo n.º 3
0
 private static void MinimalElement(BinarTreeNode p, ref int min)
 {
     if (p != null)
     {
         if (p.Data < min)
         {
             min = p.Data;
         }
         MinimalElement(p.left, ref min);  //переход к левому поддереву
         MinimalElement(p.right, ref min); //переход к правому поддереву
     }
 }
Ejemplo n.º 4
0
        static BinarTreeNode Add(ref BinarTreeNode root, int d) //добавление элемента d в дерево поиска
        {
            BinarTreeNode p = root;                             //корень дерева
            BinarTreeNode r = null;
            //флаг для проверки существования элемента d в дереве
            bool ok = false;

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

            if (r != null)
            {
                // если d<r.key, то добавляем его в левое поддерево
                if (d < r.Data)
                {
                    r.left = NewPoint;
                }
                // если d>r.key, то добавляем его в правое поддерево
                else
                {
                    r.right = NewPoint;
                }
            }
            else
            {
                root = NewPoint;
            }
            return(NewPoint);
        }
Ejemplo n.º 5
0
        private static void BinarTreeWorks()
        {
            int[]  Menu        = null;
            string userCommand = null;

            do
            {
                Console.WriteLine("1)Сформировать идеально сбалансированное дерево и преобразовать в дерево поиска");
                Console.WriteLine("2)Найти минимальный элемент дерева");
                Console.WriteLine("3)В главное меню");
                Console.Write(">");
                userCommand = Console.ReadLine();

                switch (userCommand)
                {
                case "1":
                    BinarTreeNode p         = null;
                    BinarTreeNode idealRoot = IdealTree(15, p);
                    Console.WriteLine("Идеально сбалансированное дерево:");
                    ShowTree(idealRoot, 50, Console.CursorTop);
                    Console.SetCursorPosition(0, maxTop + 1);
                    Console.WriteLine();
                    root = null;
                    GenerateSearchTree(idealRoot, ref root);
                    Console.WriteLine("Дерево поиска:");
                    ShowTree(root, 50, Console.CursorTop);
                    Console.SetCursorPosition(0, maxTop + 1);
                    break;

                case "2":
                    int min = int.MaxValue;
                    MinimalElement(root, ref min);
                    Console.WriteLine($"Минимальный элемент:{min}.");
                    break;

                case "3":
                    break;

                default:
                    Console.WriteLine("Неверная команда.");
                    break;
                }
            } while (userCommand != "3");
        }
Ejemplo n.º 6
0
        static BinarTreeNode IdealTree(int size, BinarTreeNode p)
        {
            BinarTreeNode r;
            int           nl, nr;

            if (size == 0)
            {
                p = null; return(p);
            }
            nl = size / 2;
            nr = size - nl - 1;
            int number = rnd.Next(0, 20);

            r      = new BinarTreeNode();
            r.Data = number;
            // i++;
            r.left  = IdealTree(nl, r.left);
            r.right = IdealTree(nr, r.right);
            return(r);
        }
Ejemplo n.º 7
0
 public BinarTreeNode(int d)
 {
     Data  = d;
     left  = null;
     right = null;
 }
Ejemplo n.º 8
0
                      right; //адрес правого поддерева
 public BinarTreeNode()
 {
     Data  = 0;
     left  = null;
     right = null;
 }