//Левый сын, правый брат (таблица, массив) public static void Main(string[] args) { Console.OutputEncoding = Encoding.UTF8; int n = int.TryParse(Console.ReadLine(), out int temp) ? temp : 10; Console.WriteLine($"N = {n}"); MyTree myTree = new MyTree(n); Random random = new Random(); var numbers = Enumerable.Range(1, n).OrderBy(i => random.Next()).ToArray(); foreach (var number in numbers) { myTree.AddRandom(number); } Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine("Дерево А"); Console.ForegroundColor = ConsoleColor.Gray; TreePrinter.PrintMyTree(myTree); Console.ForegroundColor = ConsoleColor.DarkMagenta; PreOrder(myTree); InOrder(myTree); Console.ForegroundColor = ConsoleColor.Gray; MyTree deleteTree = new MyTree(n / 2); numbers = numbers.OrderBy(i => random.Next()).TakeWhile((_, idx) => idx < numbers.Length / 2).ToArray(); foreach (var number in numbers) { deleteTree.AddRandom(number); } Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine("Дерево B"); Console.ForegroundColor = ConsoleColor.Gray; TreePrinter.PrintMyTree(deleteTree); Console.ForegroundColor = ConsoleColor.DarkMagenta; PreOrder(deleteTree); InOrder(deleteTree); Console.ForegroundColor = ConsoleColor.Gray; myTree.Deletion(deleteTree); Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine("А = A ⋂ B"); Console.ForegroundColor = ConsoleColor.Gray; TreePrinter.PrintMyTree(myTree); Console.ForegroundColor = ConsoleColor.DarkMagenta; PreOrder(myTree); InOrder(myTree); Console.ForegroundColor = ConsoleColor.Gray; Console.ReadLine(); }
public static void PrintMyTree(MyTree myTree, int topMargin = 0, int leftMargin = 2) { BNode firstNode = new BNode(0); // Console.WriteLine($"Top = {myTree.topIdx}"); // for (int i = 0; i <= myTree.treeSize; i++) // { // Console.WriteLine($"{i,2}) {myTree.table[i, 0],2} {myTree.table[i, 1],2} {myTree.table[i, 2],2}"); // } Add(firstNode, myTree.TopIdx); TreePrinter.Print(firstNode, topMargin, leftMargin); void Add(BNode node, int index) { if (myTree.Table[index, 1] != 0) { node.Item = myTree.Table[index, 1]; // если есть сын if (myTree.Table[index, 0] != 0) { int childIdx = myTree.Table[index, 0]; // если сын меньше ключа if (myTree.Table[childIdx, 1] < node.Item) { node.Left = new BNode(0); Add(node.Left, childIdx); int broIdx = myTree.Table[childIdx, 2]; // если у сына есть брат if (broIdx != 0) { node.Right = new BNode(0); Add(node.Right, broIdx); } } // если сын больше ключа (значит сын у нас один) else { node.Right = new BNode(0); Add(node.Right, childIdx); } } } // else // { // firstNode = null; // } } }