Exemple #1
0
        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();
        }
Exemple #2
0
        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();
        }
Exemple #3
0
 public Tree (int data)
 {
     this.data = data;
     left = null;
     right = null;
     parent = null;
 }
Exemple #4
0
        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);
        }
Exemple #5
0
 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);
 }
Exemple #8
0
 //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));
        }
Exemple #12
0
        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);
        }
Exemple #13
0
        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;
        }
Exemple #15
0
        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);
                    }
                }
            }
            

        }
Exemple #16
0
 /// <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);
         }
     }
 }
Exemple #17
0
        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();
        }
Exemple #18
0
 public Tree(TItem nodeValue)
 {
     this.NodeData  = nodeValue;
     this.LeftTree  = null;
     this.RightTree = null;
 }
Exemple #19
0
        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;
 }
Exemple #22
0
 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);
 }
Exemple #23
0
 public void Initialize()
 {
     tree = new Tree();
 }
Exemple #24
0
 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);
         }
     }
 }
Exemple #25
0
 private static void SetToNull(ref Tree tree, bool isLeft)
 {
     if (isLeft)
         tree.Left = null;
     else
         tree.Right = null;
 }
Exemple #26
0
 /// <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);
         }
     }
 }
Exemple #27
0
 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");
     }
 }
Exemple #28
0
        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;
 }
Exemple #30
0
 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);
         }
     }
 }
Exemple #31
0
 public Tree()
 {
     left = null;
     right = null;
     parent = null;
 }
Exemple #32
0
        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);
            //    }
            //}
        }
Exemple #33
0
        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;

        }
Exemple #34
0
 public Tree()
 {
     this.parent = this;
 }
Exemple #35
0
 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");
     }
 }