public static void Test1() { Console.WriteLine("Starting the Test !!"); Console.ReadLine(); Console.WriteLine(">> Initialising values"); int[] TestValue = Utilities.RandomFiller.RandomInt32Array(); Tree<int> TestTree = new Tree<int>(); Random rand_0 = new Random(); for(int i = 0; i < 10; i++){ Console.WriteLine(">>>> Adding value number {0}", i); TestTree.AddValue(TestValue[rand_0.Next(0, 100)]); } Console.WriteLine(); Console.WriteLine(">>Starting the Test when enter is pressed"); Console.ReadLine(); for (int i = 0; i < 100; i++) { Console.WriteLine(">>>> Searching for {0} >> ", i); Console.Write(TestTree.GetValue(i)); } Console.WriteLine(); Console.WriteLine("Done with Test1 !!"); Console.WriteLine("Press enter to exit"); Console.ReadLine(); }
static void Main(string[] args) { Tree<int> tree1 = new Tree<int>(10); tree1.Insert(5); tree1.Insert(11); tree1.Insert(5); tree1.Insert(-12); tree1.Insert(15); tree1.Insert(0); tree1.Insert(14); tree1.Insert(-8); tree1.Insert(10); tree1.Insert(8); tree1.Insert(8); tree1.WalkTree(); Tree<string> tree2 = new Tree<string>("Hello"); tree2.Insert("World"); tree2.Insert("How"); tree2.Insert("Are"); tree2.Insert("You"); tree2.Insert("Today"); tree2.Insert("I"); tree2.Insert("Hope"); tree2.Insert("You"); tree2.Insert("Are"); tree2.Insert("Feeling"); tree2.Insert("Well"); tree2.Insert("!"); tree2.WalkTree(); }
public Tree (int data) { this.data = data; left = null; right = null; parent = null; }
static void Main(string[] args) { Tree<int> tree1 = new Tree<int>(10); tree1.Insert(5); tree1.Insert(11); tree1.Insert(5); tree1.Insert(-12); tree1.Insert(15); tree1.Insert(0); tree1.Insert(14); tree1.Insert(-8); tree1.Insert(10); tree1.Insert(8); tree1.Insert(8); string sortedData = tree1.WalkTree(); Console.WriteLine("Sorted data is: {0}", sortedData); Tree<string> tree2 = new Tree<string>("Hello"); tree2.Insert("World"); tree2.Insert("How"); tree2.Insert("Are"); tree2.Insert("You"); tree2.Insert("Today"); tree2.Insert("I"); tree2.Insert("Hope"); tree2.Insert("You"); tree2.Insert("Are"); tree2.Insert("Feeling"); tree2.Insert("Well"); tree2.Insert("!"); sortedData = tree2.WalkTree(); Console.WriteLine("Sorted data is: {0}", sortedData); }
static void Main(string[] args) { Tree<int> tree1 = new Tree<int>(10); tree1.InsertIntoTree(5, 11, 5, -12, 15, 0, 14, -8, 10); foreach (int item in tree1) { Console.WriteLine(item); } }
public void Add(User user) { if (_userTreeDictionary.ContainsKey(user.UserId)) { throw new Exception("User already exists."); } _userTree = new Tree<User>(user); _userTreeDictionary.Add(user.UserId, _userTree); }
private void InitializeList(Tree tree) { if (tree == null) { return; } InitializeList(tree.Left); this.list.Add(tree.Item); InitializeList(tree.Right); }
//constructor public Business(int val) { this.val = val; if (val == (int)MainGUI.FORMATBOX.INT) treeInt = new Tree<int>(); else if (val == (int)MainGUI.FORMATBOX.DOUBLE) treeDouble = new Tree<double>(); else treeString = new Tree<string>(); }
public void Add(Message message) { if (_userMessageTreeDictionary.ContainsKey(message.UserId)) { throw new Exception("User already exists."); } this._messageTree = new Tree<Message>(message); _userMessageTreeDictionary.Add(message.UserId, _messageTree); }
public void AddChild(User parent, User child) { if (!_userTreeDictionary.ContainsKey(parent.UserId)) { throw new Exception("Parent user does not exist"); } _userTree = _userTreeDictionary[parent.UserId]; _userTree.Root.AddChild(new TreeNode<User>(child)); }
public void AddChild(Message message) { if (!_userMessageTreeDictionary.ContainsKey(message.UserId)) { throw new Exception("Parent message user does not exist"); } this._messageTree = _userMessageTreeDictionary[message.UserId]; this._messageTree.Root.AddChild(new TreeNode<Message>(message)); }
static void Main(string[] args) { Tree<int> tree1 = new Tree<int>(10); tree1.Insert(5); tree1.Insert(11); tree1.Insert(5); tree1.Insert(-12); tree1.Insert(15); tree1.Insert(0); tree1.Insert(14); tree1.Insert(-8); tree1.Insert(10); foreach (int item in tree1) Console.WriteLine(item); }
static void Main(string[] args) { Tree tree = new Tree(); using(var reader = File.OpenText("Cards.txt")) { var line = ""; var hasName = false; var name = ""; var hasCardId = false; var cardId = ""; while( (line = reader.ReadLine()) != null ) { if(line.StartsWith("Name:")) { name = line.Replace("Name:", ""); hasName = true; } if(line.StartsWith("CardId:")) { cardId = line.Replace("CardId:", ""); hasCardId = true; } if(hasCardId && hasName) { hasCardId = false; hasName = false; tree.Add(new Leaf(new Card(cardId, name))); } } } tree.Search("Placeholder Card").Card.Write(); tree.Write(); tree.Search("Activate Magmatron").Card.Write(); tree.Write(); tree.Search("Swipe").Card.Write(); tree.Write(); tree.Search("Savage Roar").Card.Write(); tree.Write(); var card = tree.Search("PoopCard"); if (card != null) card.Card.Write(); //tree.InOrder(); var input = Console.ReadLine(); }
public IEnumerable<Message> GetAll(User user) { if (!_userMessageTreeDictionary.ContainsKey(user.UserId)) { throw new Exception("User does not exist"); } _messageTree = _userMessageTreeDictionary[user.UserId]; var children = new List<Message>(); for (var i = 0; i < _messageTree.Root.ChildrenCount; i++) { children.Add(_messageTree.Root.GetChild(i).Value); } return children; }
public void Add (int data) { var node = new Tree(data); // Если первый пустой if (this.data == 0 && this.left == null && this.right == null && this.parent == null) { this.data = data; count++; } else { // Если уже существует первый if (node.Data < this.Data) { if (this.Left == null) { this.Left = node; left.parent = this; count++; } else { left.Add(data); } } else if (node.Data > this.Data) { if (this.Right == null) { this.Right = node; Right.parent = this; count++; } else { right.Add(data); } } } }
/// <summary> /// Adds the item to the tree. /// </summary> /// <param name="value"></param> public void Add(int value) { if (this.Find(value)) { return; } if (length == 0) { this.Item = value; length++; return; } this.length++; if (this.Item > value) { if (this.Left == null) { this.Left = new Tree(); this.Left.Item = value; this.Left.parent = this; return; } else { this.Left.Add(value); } } else { if (this.Right == null) { this.Right = new Tree(); this.Right.Item = value; this.Right.parent = this; return; } else { this.Right.Add(value); } } }
static void Main(string[] args) { Tree tr = new Tree(); tr.Add(12); tr.Add(45); tr.Add(10); tr.Add(25); tr.Add(75); tr.Add(39); tr.Add(11); tr.Add(2); tr.Add(5); tr.Add(1);// 11 штук tr.Add(22); tr.Add(42); tr.Add(40); tr.Add(43); // 15 tr.Add(3); tr.Add(6); var tt = tr.Height(); var v = tr.Size(); tr.Delete(6); var vb = tr.Size(); // var bb = tr.Sort(); // var v = tr.Size(); // подумать над тем что должно случиться если одиновый!!!!!!!!!!!!!!!!!!!!!!! // var bb = tr.Find(10); // подумать как уменьшить количество возвращений. Подумать, что возвращать если такого нет значения // var zz = tr.Size(); //tr.Delete(12); // var ss = tr.Height(); // разобраться!!!!!!!!!!!! // var vv = tr.NodeSize(tr.Left); //var vv1 = tr.Width(); // var nn = tr.Sort(); }
public Tree(TItem nodeValue) { this.NodeData = nodeValue; this.LeftTree = null; this.RightTree = null; }
static void Main(string[] args) { int value; String data; Tree theTree = new Tree(); theTree.insert(50, "Ahmad"); theTree.insert(25, "Rosa"); theTree.insert(75, "Raisa"); theTree.insert(12, "Naya"); theTree.insert(37, "Gagas"); theTree.insert(43, "Ainun"); theTree.insert(30, "Beri"); theTree.insert(33, "Vivid"); theTree.insert(87, "Orin"); theTree.insert(93, "Wiwid"); theTree.insert(97, "Sasa"); while (true) { Console.Write("Enter first letter of show, " + "insert, find, delete, or traverse: "); int choice = getChar(); switch (choice) { case 's': theTree.displayTree(); break; case 'i': Console.Write("Enter value and data to" + " insert: "); value = getInt(); data = getString(); theTree.insert(value, data); break; case 'f': Console.Write("Enter value to find: "); value = getInt(); Node found = theTree.find(value); if (found != null) { Console.Write("Found: "); found.displayNode(); Console.Write("\n"); } else { Console.Write("Could not find " + value); } break; case 'd': Console.Write("Enter value to delete: "); value = getInt(); bool didDelete = theTree.delete(value); if (didDelete) { Console.Write("Deleted " + value); } else { Console.Write("Could not delete " + value); } break; case 't': Console.Write("Enter type 1, 2 or 3: "); value = getInt(); theTree.traverse(value); break; default: Console.Write("Invalid entry "); break; } } }
static void Main() { Tree tr = new Tree(); if (tr.Insert(43)) { Console.WriteLine("43 вставлено успешно!"); } else { Console.WriteLine("43 не удалось вставить!"); } if (tr.Insert(143)) { Console.WriteLine("143 вставлено успешно!"); } else { Console.WriteLine("143 не удалось вставить!"); } if (tr.Insert(42)) { Console.WriteLine("42 вставлено успешно!"); } else { Console.WriteLine("42 не удалось вставить!"); } if (tr.Insert(43)) { Console.WriteLine("43 вставлено успешно!"); } else { Console.WriteLine("43 не удалось вставить!"); } if (tr.Insert(45)) { Console.WriteLine("45 вставлено успешно!"); } else { Console.WriteLine("45 не удалось вставить!"); } if (tr.Delete(45)) { Console.WriteLine("45 удалено успешно!"); } else { Console.WriteLine("45 не удалось удалить!"); } if (tr.Delete(145)) { Console.WriteLine("145 удалено успешно!"); } else { Console.WriteLine("145 не удалось удалить!"); } if (tr.Delete(43)) { Console.WriteLine("43 удалено успешно!"); } else { Console.WriteLine("43 не удалось удалить!"); } if (tr.Delete(43)) { Console.WriteLine("43 удалено успешно!"); } else { Console.WriteLine("43 не удалось удалить!"); } }
public void Dispose() { this._userTree = null; this._userTreeDictionary = null; }
private int Width(Tree root, ref int width) { if (root == null) { return 0; } if (root.left==null && root.right==null) { width++; } int left = 1 + Width(root.left, ref width); int right = 1 + Width(root.right, ref width); return Math.Max(left, right); }
public void Initialize() { tree = new Tree(); }
private void Reverse(Tree node, ref List<int> bb) { if (bb.Count != count) { if (node.left == null && node.right == null) { bb.Add(node.data); var current = node; if (bb.Count != count) { node.parent.right = null; Reverse(current.parent, ref bb); } } else if (node.left != null && node.right == null) { bb.Add(node.data); var current = node; if (node.parent != null) { node.parent.right = node.left; } else { current = node.left; current.parent = null; Reverse(current, ref bb); } node.left.parent = node.parent; Reverse(current.parent, ref bb); } else { Reverse(node.right, ref bb); } } }
private static void SetToNull(ref Tree tree, bool isLeft) { if (isLeft) tree.Left = null; else tree.Right = null; }
/// <summary> /// Removes the item in the tree. /// </summary> /// <param name="value"></param> public void Remove(int value) { if (value > this.Item) { if (this.Right != null) { if ((this.Right.Item == value) && (this.Right.Left == null) && (this.Right.Right == null)) { this.Right = null; return; } this.Right.Remove(value); } return; } if (value < this.Item) { if (this.Left != null) { if ((this.Left.Item == value) && (this.Left.Left == null) && (this.Left.Right == null)) { this.Right = null; return; } this.Left.Remove(value); } return; } if (value == this.Item) { this.length--; if (this.Right == null) { this.parent.Left = this.Left; return; } if (this.Left == null) { this.parent.Right = this.Right; return; } if (this.Right.Left != null) { this.Item = this.Right.Left.Item; this.Right.Left.Remove(this.Right.Left.Item); } else { this.Item = this.Right.Item; this.Right.Remove(this.Right.Item); } } }
public string Insert(int key, Tree t) // пошаговое добавление элемента { if (!ready) // алгоритм ещё не завершился { if (currentNode.Key >= key) // добавляемое значение меньше или равно текущему { if (currentNode.Left == null) // добавялем слева { if (!created) // создание элемента (без связи) { string res = "Значение добавляемого ключа " + key + " меньше или равно " + currentNode.Key + " и левая ветка свободна, создаём элемент"; currentNode.X -= currentNode.DX; created = true; return(res); } else // связывание элемента с родителем { currentNode.Color = Color.FromArgb(255, 255, 0, 0); currentNode.Left = new Node(key); currentNode.Left.Color = Color.FromArgb(255, 0, 255, 0); string res = "Значение добавляемого ключа " + key + " меньше или равно " + currentNode.Key + " и левая ветка свободна, добавляем элемент"; ready = true; return(res); } } else // ищем слева { currentNode.Color = Color.FromArgb(255, 255, 0, 0); string res = "Значение добавляемого ключа " + key + " меньше или равно " + currentNode.Key + ", необходимо искать свободную ветку в левом поддереве"; currentNode.Left.DX = currentNode.DX / TreeConst.CoeffDX; currentNode.Left.X = currentNode.X - currentNode.DX; currentNode.Left.Y = currentNode.Y + TreeConst.DY; currentNode = currentNode.Left; return(res); } } else // добавляемое значение больше текущего { if (currentNode.Right == null) // добавляем справа { if (!created) // создание элемента (без связи) { string res = "Значение добавляемого ключа " + key + " больше " + currentNode.Key + " и правая ветка свободна, создаём элемент"; currentNode.X += currentNode.DX; created = true; return(res); } else // связывание элемента с родителем { string res = "Элемент со значением " + key + " становится правым потомком элемента со значением " + currentNode.Key; currentNode.Color = Color.FromArgb(255, 255, 0, 0); currentNode.Right = new Node(key); currentNode.Right.Color = Color.FromArgb(255, 0, 255, 0); ready = true; return(res); } } else // ищем справа { currentNode.Color = Color.FromArgb(255, 255, 0, 0); string res = "Значение добавляемого ключа " + key + " больше " + currentNode.Key + ", необходимо искать свободную ветку в правом поддереве"; currentNode.Right.DX = currentNode.DX / TreeConst.CoeffDX; currentNode.Right.X = currentNode.X + currentNode.DX; currentNode.Right.Y = currentNode.Y + TreeConst.DY; currentNode = currentNode.Right; return(res); } } } else // алгоритм завершился, возможен перезапуск { var res = MessageBox.Show("Хотите добавить ещё один элемент?", "Добавление", MessageBoxButton.YesNo); if (res == MessageBoxResult.Yes) { currentNode = t.Root; t.Reset(t.Root); ready = false; created = false; evRestart(this); } return("\n"); } }
static void doWork() { Tree<Employee> empTree = new Tree<Employee>( new Employee { Id = 1, FirstName = "Kim", LastName = "Abercrombie", Department = "IT" }); empTree.Insert( new Employee { Id = 2, FirstName = "Jeff", LastName = "Hay", Department = "Marketing" }); empTree.Insert( new Employee { Id = 4, FirstName = "Charlie", LastName = "Herb", Department = "IT" }); empTree.Insert( new Employee { Id = 6, FirstName = "Chris", LastName = "Preston", Department = "Sales" }); empTree.Insert( new Employee { Id = 3, FirstName = "Dave", LastName = "Barnett", Department = "Sales" }); empTree.Insert( new Employee { Id = 5, FirstName = "Tim", LastName = "Litton", Department = "Marketing" }); Console.WriteLine("All employees"); var allEmployees = from e in empTree.ToList<Employee>() select e; foreach (var emp in allEmployees) { Console.WriteLine(emp); } empTree.Insert(new Employee { Id = 7, FirstName = "David", LastName = "Simpson", Department = "IT" }); Console.WriteLine("\nEmployee added"); Console.WriteLine("All employees"); foreach (var emp in allEmployees) { Console.WriteLine(emp); } //Console.WriteLine("List of departments"); //// var depts = empTree.Select(d => d.Department).Distinct(); //var depts = (from d in empTree // select d.Department).Distinct(); //foreach (var dept in depts) //{ // Console.WriteLine("Department: {0}", dept); //} //Console.WriteLine("\nEmployees in the IT department"); //// var ITEmployees = //// empTree.Where(e => String.Equals(e.Department, "IT")) //// .Select(emp => emp); //var ITEmployees = from e in empTree // where String.Equals(e.Department, "IT") // select e; //foreach (var emp in ITEmployees) //{ // Console.WriteLine(emp); //} //Console.WriteLine("\nAll employees grouped by department"); //// var employeesByDept = empTree.GroupBy(e => e.Department); //var employeesByDept = from e in empTree // group e by e.Department; //foreach (var dept in employeesByDept) //{ // Console.WriteLine("Department: {0}", dept.Key); // foreach (var emp in dept) // { // Console.WriteLine("\t{0} {1}", emp.FirstName, emp.LastName); // } //} }
public void Dispose() { this._messageTree = null; this._userMessageTreeDictionary = null; }
private void Sort(Tree node, ref List<int> bb) { if (bb.Count != count) { if (node.left == null && node.right == null) { bb.Add(node.data); var current = node; if (bb.Count != count) { node.parent.left = null; Sort(current.parent, ref bb); } } else if (node.left == null && node.right != null) { bb.Add(node.data); var current = node; if (node.parent != null) { node.parent.left = node.right; } else { current = node.right; current.parent = null; Sort(current, ref bb); } node.right.parent = node.parent; Sort(current.parent, ref bb); } else { Sort(node.left,ref bb); } } }
public Tree() { left = null; right = null; parent = null; }
static void DoWork() { Tree<Employee> empTree = new Tree<Employee>(new Employee { Id = 1, FirstName = "Janet", LastName = "Gates", Department = "IT"}); empTree.Insert(new Employee { Id = 2, FirstName = "Orlando", LastName = "Gee", Department = "Marketing"}); empTree.Insert(new Employee { Id = 4, FirstName = "Keith", LastName = "Harris", Department = "IT" }); empTree.Insert(new Employee { Id = 6, FirstName = "Lucy", LastName = "Harrington", Department = "Sales" }); empTree.Insert(new Employee { Id = 3, FirstName = "Eric", LastName = "Lang", Department = "Sales" }); empTree.Insert(new Employee { Id = 5, FirstName = "David", LastName = "Liu", Department = "Marketing" }); Console.WriteLine("All employees"); var allEmployees = from e in empTree.ToList<Employee>() select e; foreach (var emp in allEmployees) { Console.WriteLine(emp); } empTree.Insert(new Employee { Id = 7, FirstName = "Donald", LastName = "Blanton", Department = "IT" }); Console.WriteLine("\nEmployee added"); Console.WriteLine("All employees"); foreach (var emp in allEmployees) { Console.WriteLine(emp); } //Console.WriteLine("List of departments"); ////var depts = empTree.Select(d => d.Department).Distinct(); //var depts = (from d in empTree // select d.Department).Distinct(); //foreach (var dept in depts) //{ // Console.WriteLine("Department: {0}", dept); //} //Console.WriteLine("\nEmployees in the IT department"); ////var ITEmployees = //// empTree.Where(e => String.Equals(e.Department, "IT")) //// .Select(emp => emp); //var ITEmployees = from e in empTree // where String.Equals(e.Department, "IT") // select e; //foreach (var emp in ITEmployees) //{ // Console.WriteLine(emp); //} //Console.WriteLine("\nAll employees grouped by department"); ////var employeesByDept = empTree.GroupBy(e => e.Department); //var employeesByDept = from e in empTree // group e by e.Department; //foreach (var dept in employeesByDept) //{ // Console.WriteLine("Department: {0}", dept.Key); // foreach (var emp in dept) // { // Console.WriteLine("\t{0} {1}", emp.FirstName, emp.LastName); // } //} }
public Tree Find(int data) { Tree node = new Tree(data); if (this==null) { // вернуть эксепшен } else if (this.data == data) { return this; } else { if (data < this.Data) { if (this.Left.data == data) { node = this.Left; } else { left.Find(data); } } else if (data > this.Data) { if (this.Right.data == data) { node= this.Right; } else { right.Find(data); } } } return node; }
public Tree() { this.parent = this; }
public string Remove(int key, Tree t) // пошаговое удаление элемента { if (!ready) // алгоритм ещё не завершился { if (t.Root.Key == key) // удаление корня { if (t.Root.Left == null && t.Root.Right == null) // нет потомков { t.Root = null; } else if (t.Root.Left == null) // только правый { t.Root = t.Root.Right; t.Root.Right = null; return("Удаление корневого элемента " + key + ", он замещается правым потомком " + t.Root.Key); } else if (t.Root.Right == null) // только левый { t.Root = t.Root.Left; t.Root.Left = null; return("Удаление корневого элемента " + key + ", он замещается левым потомком " + t.Root.Key); } else // есть оба потомка { t.Root.Color = Color.FromArgb(255, 0, 0, 255); if (min_search) // ещё не найден замещающий элемент { if (min_first) // начало поиска минимального { minNode = t.Root.Right; // ищем в правом поддереве minNode.Color = Color.FromArgb(255, 255, 0, 0); min_first = false; // больше сюда не заходим } return(Minimum()); } else // найден замещающий элемент { int k = t.Minimum(t.Root.Right).Key; // находим минимального потомка string res = "Удаляемый элемент " + key + " найден, его место займёт наименьший из потомков в правом поддереве " + k; t.Root.Color = Color.FromArgb(255, 0, 255, 0); t.Root.Right = t.Remove(t.Root.Right, k); // удаляем этого потомка t.Root.Key = k; ready = true; return(res); } } } if (currentNode == null) { ready = true; return("Элемент с ключом " + key + " не найден"); } if (key < currentNode.Key) { currentNode.Color = Color.FromArgb(255, 255, 0, 0); string res = "Удаляемый элемент " + key + " меньше, чем " + currentNode.Key + ", необходмо искать в левом поддереве"; currentNode = currentNode.Left; return(res); } else if (key > currentNode.Key) { currentNode.Color = Color.FromArgb(255, 255, 0, 0); string res = "Удаляемый элемент " + key + " больше, чем " + currentNode.Key + ", необходмо искать в правом поддереве"; currentNode = currentNode.Right; return(res); } else if (currentNode.Left != null && currentNode.Right != null) // нашли удаляемый, у него есть оба потомка { currentNode.Color = Color.FromArgb(255, 0, 0, 255); if (min_search) // ещё не найден замещающий элемент { if (min_first) // начало поиска минимального { minNode = currentNode.Right; // ищем в правом поддереве minNode.Color = Color.FromArgb(255, 255, 0, 0); min_first = false; // больше сюда не заходим } return(Minimum()); } else // замещающий элемент найден { int k = t.Minimum(currentNode.Right).Key; // находим минимального потомка string res = "Удаляемый элемент " + key + " найден, его место займёт наименьший из потомков в правом поддереве " + k; currentNode.Key = k; currentNode.Color = Color.FromArgb(255, 0, 255, 0); currentNode.Right = t.Remove(currentNode.Right, currentNode.Key); // удаляем этого потомка ready = true; return(res); } } else if (currentNode.Left != null) // есть только левый потомок, он встаёт на место удаляемого { if (!found) // выделение цветом удаляемого элемента и его родителя { string res = "Удаляемый элемент " + key + " найден, его место займёт левый потомок " + currentNode.Left.Key; currentNode.Color = Color.FromArgb(255, 0, 0, 255); currentNode.Left.Color = Color.FromArgb(255, 0, 255, 0); found = true; return(res); } else // удаление элемента { string res = "Элемент " + key + " удалён"; currentNode.ReplaceParentsChild(currentNode.Left); currentNode = currentNode.Left; ready = true; return(res); } } else if (currentNode.Right != null) // есть только правый потомок, он встаёт на место удаляемого { if (!found) // выделение цветом удаляемого элемента и его родителя { string res = "Удаляемый элемент " + key + " найден, его место займёт правый потомок " + currentNode.Right.Key; currentNode.Color = Color.FromArgb(255, 0, 0, 255); currentNode.Right.Color = Color.FromArgb(255, 0, 255, 0); found = true; return(res); } else // удаление элемента { string res = "Элемент " + key + " удалён"; currentNode.ReplaceParentsChild(currentNode.Right); currentNode = currentNode.Right; ready = true; return(res); } } else // нет потомков, просто удаляем элемент { if (!found) // выделение цветом удаляемого элемента { string res = "Удаляемый элемент " + key + " найден, у него нет потомков"; currentNode.Color = Color.FromArgb(255, 0, 255, 0); found = true; return(res); } else // удаление элемента { string res = "Элемент " + key + " удалён"; currentNode.ReplaceParentsChild(null); ready = true; found = false; return(res); } } } else // алгоритм завершился, возможен перезапуск { var res = MessageBox.Show("Хотите удалить ещё один элемент?", "Удаление", MessageBoxButton.YesNo); if (res == MessageBoxResult.Yes) { currentNode = t.Root; t.Reset(t.Root); ready = false; min_first = true; min_search = true; found = false; evRestart(this); } return("\n"); } }