Example #1
0
 public TreeString(string value)
 {
     this.value = value;
     parent     = null;
     left       = null;
     right      = null;
 }
Example #2
0
        private static void CountCompare(TreeString tree)
        {
            Console.WriteLine(
                "Введите символ для поиска:");
            string charToSearch = Console.ReadKey().KeyChar.ToString();
            int    counter      = 0;

            Count(tree);
            Console.WriteLine($"\nКоличество элементов начинающихся с заданного символа = {counter}");

            void Count(TreeString _tree)
            {
                if (_tree.Value.StartsWith(charToSearch))
                {
                    counter++;
                }
                if (_tree.Left != null)
                {
                    Count(_tree.Left);
                }
                if (_tree.Right != null)
                {
                    Count(_tree.Right);
                }
            }
        }
Example #3
0
 private TreeString(TreeString parent, string value)
 {
     this.value  = value;
     this.parent = parent;
     left        = null;
     right       = null;
 }
Example #4
0
        /// <summary>
        /// Создание идеального дереваб не упорядоченного
        /// </summary>
        /// <param name="values">массив строк для добавления</param>
        /// <returns></returns>
        public static TreeString IdealTree(params string[] values)
        {
            if (values.Length == 0)
            {
                return(null);
            }
            int        sizeLeft    = values.Length / 2;
            int        sizeRight   = values.Length - sizeLeft - 1;
            TreeString currentKnot = new TreeString(values[0]);

            if (sizeLeft > 0)
            {
                string[] leftArray = new string[sizeLeft];
                Array.Copy(values, 1, leftArray, 0, sizeLeft);
                currentKnot.left        = IdealTree(leftArray);
                currentKnot.left.parent = currentKnot;
            }
            if (sizeRight > 0)
            {
                string[] rightArray = new string[sizeRight];
                Array.Copy(values, sizeLeft + 1, rightArray, 0, sizeRight);
                currentKnot.right        = IdealTree(rightArray);
                currentKnot.right.parent = currentKnot;
            }
            return(currentKnot);
        }
Example #5
0
 public TreeString()
 {
     value  = null;
     parent = null;
     left   = null;
     right  = null;
 }
Example #6
0
        public static void ShowMenu()
        {
            Console.WriteLine("\nРабота со списками и деревьями");
            var    tree       = new TreeString();
            string operations = "Выберите меню:"
                                + "\n\t1 Меню работы со списками"
                                + "\n\t2 Меню работы с двусвязными списками"
                                + "\n\t3 Меню работы с деревьями";
            int number = -1;

            while (number != 0)
            {
                Console.WriteLine(operations);
                number = Menu.GetInt("Введите номер операции. Для выхода введите 0, "
                                     + "для повтора меню 11", min: -1, max: 5);
                switch (number)
                {
                case 0: break;

                case 1:
                    LinkedListDoubleMenu.Show();
                    break;

                case 2:
                    BiLinkedListIntMenu.Show();
                    break;

                case 3:
                    TreeStringMenu.Show();
                    break;
                }
            }
        }
Example #7
0
        private static TreeString GetTreeFromString()
        {
            var        words = GetWords("Введите строку из слов").Distinct();
            TreeString tree  = new TreeString();

            foreach (var word in words)
            {
                tree.Add(word);
            }
            return(tree);
        }
Example #8
0
        private static TreeString GetIdealTreeFromString()
        {
            var tempArray = GetWords("Введите строку из слов").Distinct();

            string[] words = new string[tempArray.Count()];
            if (words.Length == 0)
            {
                return(new TreeString());
            }
            int index = 0;

            foreach (var word in tempArray)
            {
                words[index++] = word.ToString();
            }
            return(TreeString.IdealTree(words));
        }
Example #9
0
 /// <summary>
 /// Рекурсивное создание элементов принтера
 /// </summary>
 /// <param name="tree">Элемент дерева</param>
 /// <param name="parent">Предок создаваемого элемента</param>
 /// <param name="level">Уровень создаваемого элемента</param>
 public PrinterNode(TreeString tree, PrinterNode parent = null, int level = 0)
 {
     if (parent != null)
     {
         Parent = parent;
     }
     this.level = level;
     Text       = tree.Value;
     if (tree.HasLeft)
     {
         this.Left = new PrinterNode(tree.Left, this, level + 1);
     }
     if (tree.HasRight)
     {
         this.Right = new PrinterNode(tree.Right, this, level + 1);
     }
     StartPosition = -1;
 }
Example #10
0
        /// <summary>
        /// Добавление нового элемента с заданным значением(упорядоченное)
        /// </summary>
        /// <param name="newValue">значение для добавления</param>
        /// <returns>возвращает новый элемент илм существующий(если значение имеется в дереве)</returns>
        public TreeString Add(string newValue)
        {
            if (IsEmpty)
            {
                this.value = newValue;
                return(this);
            }
            bool       isFind       = false;
            TreeString currentKnot  = this;
            TreeString previousKnot = this.Parent;

            while (currentKnot != null && !isFind)
            {
                previousKnot = currentKnot;
                if (newValue == currentKnot.Value)
                {
                    isFind = true;
                }
                else if (currentKnot.Value.CompareTo(newValue) > 0)
                {
                    currentKnot = currentKnot.Left;
                }
                else
                {
                    currentKnot = currentKnot.Right;
                }
            }
            if (isFind)
            {
                return(currentKnot);
            }
            if (previousKnot.Value.CompareTo(newValue) > 0)
            {
                return(previousKnot.AddLeft(newValue));
            }
            else
            {
                return(previousKnot.AddRight(newValue));
            }
        }
Example #11
0
        public static void Show()
        {
            Console.WriteLine("\nРабота с деревьями");
            var    tree       = new TreeString();
            string operations = "Операции с деревьями:"
                                + "\n\t1 Создать пустое дерево"
                                + "\n\t2 Создать дерево с заданым значением"
                                + "\n\t3 Вывести дерево в консоль боком"
                                + "\n\t4 Добавить элемент в дерево (упорядочено)"
                                + "\n\t5 Подсчет количества элементов начинающихся с заданного символа"
                                + "\n\t6 Вывести количество элементов в дереве"
                                + "\n\t7 Вывести количество уровней в дереве"
                                + "\n\t8 Создать дерево из слов из заданой строки (упорядочено)"
                                + "\n\t9 Создать идеальное дерево из слов из заданой строки(не упорядоченно)"
                                + "\n\t10 Вывести дерево сверху вниз (красиво)"
                                + "\n\t11 Повтор меню";

            Console.WriteLine(operations);
            int number = -1;

            while (number != 0)
            {
                number = GetInt("Введите номер операции. Для выхода введите 0, "
                                + "для повтора меню 11", min: -1, max: 12);
                switch (number)
                {
                case 0: break;

                case 1:
                    tree = new TreeString(); break;

                case 2:
                    Console.Write("\tВведите строку для добавления в дерево:\n\t");
                    tree = new TreeString(Console.ReadLine());
                    tree.Show();
                    break;

                case 3: tree.Show(); break;

                case 4:
                    Console.Write("\tВведите строку для добавления в дерево:\n\t");
                    tree.Add(Console.ReadLine());
                    tree.Show();
                    break;

                case 5:
                    CountCompare(tree);
                    break;

                case 6:
                    Console.WriteLine($"Количество элементов в дереве {tree.Count}");
                    break;

                case 7:
                    Console.WriteLine($"Количество уровней в дереве {tree.Levels}");;
                    break;

                case 8:
                    tree = GetTreeFromString();
                    tree.Show();
                    break;

                case 9:
                    tree = GetIdealTreeFromString();
                    tree.Show();
                    break;

                case 10:
                    var printer = new TreePrinter(tree);
                    printer.Print();
                    break;

                case 11:
                    Console.WriteLine(operations);
                    break;
                }
            }
        }
Example #12
0
 /// <summary>
 /// Создание левого элемента с заданным значением
 /// </summary>
 /// <param name="value">значение для добавления</param>
 /// <returns></returns>
 private TreeString AddLeft(string value)
 {
     left = new TreeString(this, value);
     return(Left);
 }
Example #13
0
 /// <summary>
 /// Добавление дерева в качестве правого элемента
 /// </summary>
 /// <param name="tree">дерево для добавления</param>
 private void AddRight(TreeString tree)
 {
     right        = tree;
     right.parent = this;
 }
Example #14
0
 /// <summary>
 /// Добавление дерева в качестве левого элемента
 /// </summary>
 /// <param name="tree">дерево для добавления</param>
 private void AddLeft(TreeString tree)
 {
     left        = tree;
     left.parent = this;
 }
Example #15
0
 /// <summary>
 /// Создание правого элемента с заданным значением
 /// </summary>
 /// <param name="value">значение для добавления</param>
 /// <returns></returns>
 private TreeString AddRight(string value)
 {
     right = new TreeString(this, value);
     return(Right);
 }
Example #16
0
 public TreePrinter(TreeString tree)
 {
     root = new PrinterNode(tree);
 }