Esempio n. 1
0
        public void TestConcurrencyWrite()
        {
            BinaryTree tree = new BinaryTree ();
            int multiplier = 1;

            List<Thread> threads = new List<Thread> ();
            for (int j = 0; j < 30; j++) {
                threads.Add (
                    new Thread (() => {
                        for (int i = 0; i < 20; i++) {
                            tree.Insert(i+(10^multiplier));
                        }

                        for (int i = 0; i < 20; i++) {
                            Assert.True (tree.Contains (i+(10^multiplier)));
                        }
                    }));
                multiplier++;
            }

            Parallel.ForEach (threads, (thread) => {
                thread.Start ();
                thread.Join ();
            });
        }
Esempio n. 2
0
        public static void Main(string[] args)
        {
            Dictionary<DateTime, int> dic = new Dictionary<DateTime, int> ();
            BinaryTree<DateTime, int> tree = new BinaryTree<DateTime, int> ();

            DateTime time = Convert.ToDateTime ("2012/7/30 4:30:00");
            for (int i = 0; i < 60000; i++) {
                if (!dic.ContainsKey(time)) {
                    dic.Add (time, i);
                    tree.Add (time, i);
                }
                time = time.AddSeconds (i);
            }

            var min = Convert.ToDateTime ("2012/7/30 4:30:00");
            var max = Convert.ToDateTime ("2012/7/30 4:40:00");

            var watch = Stopwatch.StartNew ();
            var result1 = dic.Keys.Where (i => i >= min && i <= max).Select (i => dic [i]).ToList ();
            watch.Stop ();
            Console.WriteLine("字典查找耗费时间:{0}ms,获取总数:{1}", watch.ElapsedMilliseconds, result1.Count);

            watch = Stopwatch.StartNew ();
            var result2 = tree.SearchRange(min, max);
            watch.Stop ();
            Console.WriteLine("二叉树耗费时间:{0}ms,获取总数:{1}", watch.ElapsedMilliseconds, result2.Count);
        }
Esempio n. 3
0
        public void TestConcurrencyRead()
        {
            BinaryTree tree = new BinaryTree ();
            for (int i = 0; i < 20; i++) {
                tree.Insert (i);
            }

            List<Thread> threads = new List<Thread> ();
            for (int j = 0; j < 30; j++) {
                threads.Add (
                    new Thread (() => {
                        for (int i = 0; i < 20; i++) {
                            Assert.True (tree.Contains (i));
                        }

                        for (int i = 20; i < 25; i++) {
                            Assert.False (tree.Contains (i));
                        }
                    }));
            }

            Parallel.ForEach (threads, (thread) => {
                thread.Start ();
                thread.Join ();
            });
        }
Esempio n. 4
0
        public void BasicTreeTest()
        {
            BinaryTree tree = new BinaryTree ();
            for (int i = 0; i < 20; i++) {
                tree.Insert (i);
            }

            for (int i = 0; i < 20; i++) {
                Assert.True (tree.Contains (i));
            }

            for (int i = 20; i < 25; i++) {
                Assert.False (tree.Contains (i));
            }
        }
Esempio n. 5
0
        public static void Main(string[] args)
        {
            var tree = new BinaryTree();
            tree.Insert(10);
            tree.Insert(9);
            tree.Insert(12);
            tree.Insert(1);
            tree.Insert(4);
            tree.Insert(2);
            Display(tree.Head);
            Console.WriteLine();
            tree.Remove(10);
            Display(tree.Head);
            Console.WriteLine();
            tree.Insert(3);
            tree.Insert(7);
            tree.Insert(11);
            tree.Insert(6);
            tree.Insert(15);
            Display(tree.Head);
            Console.WriteLine();
            tree.Insert(10);
            tree.Remove(15);
            Display(tree.Head);
            Console.WriteLine();
            tree.Remove(1);
            Display(tree.Head);
            Console.WriteLine();
            tree.Remove(4);
            Display(tree.Head);
            Console.WriteLine();
            tree.Insert(18);
            tree.Insert(19);
            tree.Insert(21);
            tree.Insert(20);
            tree.Insert(22);
            tree.Balanse();

            var contains4 = tree.Contains(7);
            Console.WriteLine(tree.Count);
        }
Esempio n. 6
0
 public void Init()
 {
     tree = new BinaryTree();
 }
Esempio n. 7
0
        static void Main(string[] args)
        {
            BinaryTree binaryTree = new BinaryTree();

            int[] numbersToAdd = new[] { 6, 4, 3, 2, 10, 1, 9 };

            foreach (int number in numbersToAdd)
            {
                binaryTree.Add(number);
            }

            Console.WriteLine("Дерево:");
            binaryTree.PrintTree();

            Console.WriteLine("Возрастание:");
            foreach (int number in binaryTree.AscendingSequence())
            {
                Console.Write($"{number} ");
            }

            Console.WriteLine();

            Console.WriteLine("Убывание:");
            foreach (int number in binaryTree.DescendingSequence())
            {
                Console.Write($"{number} ");
            }

            Console.WriteLine();

            int k = 3;

            Console.WriteLine($"k-ый минимальный элемент: {binaryTree.FindKthMinimalElement(k).Value} (k = {k})");

            BinaryTree binaryTree1 = new BinaryTree();

            int[] numbersToAdd1 = new[] { 1, 2, 3, 4, 5, 6, 7 };
            foreach (int number in numbersToAdd1)
            {
                binaryTree1.Add(number);
            }

            BinaryTree binaryTree2 = new BinaryTree();

            int[] numbersToAdd2 = new[] { 9, 8, 14, 11, 15, 20, 21 };
            foreach (int number in numbersToAdd2)
            {
                binaryTree2.Add(number);
            }

            BinaryTree binaryTree3 = new BinaryTree();

            int[] numbersToAdd3 = new[] { 6, 7, 5, 3, 1, 4 };
            foreach (int number in numbersToAdd3)
            {
                binaryTree3.Add(number);
            }

            binaryTree1.BalanceTree();
            binaryTree2.BalanceTree();
            binaryTree3.BalanceTree();

            Console.WriteLine("Сбалансированное дерево 1:");
            binaryTree1.PrintTree();

            Console.WriteLine("Сбалансированное дерево 2:");
            binaryTree2.PrintTree();

            Console.WriteLine("Сбалансированное дерево 3:");
            binaryTree3.PrintTree();
        }
Esempio n. 8
0
        static void Main(string[] args)
        {
            BinaryTree binaryTree = new BinaryTree();

            int[] intArray = new int[15];

            for (var i = 0; i < 15; i++)
            {
                Random random = new Random();
                int    rand   = 0;
                rand = random.Next(1, 50);

                while (intArray.Contains(rand))
                {
                    rand = random.Next(1, 50);
                    if (!(intArray.Contains(rand)))
                    {
                        break;
                    }
                }

                binaryTree.Add(rand);
                intArray[i] = rand;
            }

            StringBuilder initialArraySB = new StringBuilder("Initial Insert: ");

            for (int i = 0; i < intArray.Length; i++)
            {
                initialArraySB.Append(intArray[i].ToString() + " ");
            }

            initialArraySB.Length--;

            Console.WriteLine(initialArraySB);

            int depth = binaryTree.GetMaxDepth();

            Console.WriteLine("Depth: " + depth);

            Console.WriteLine("PreOrder:");
            binaryTree.PrintPreOrder(binaryTree.Root);
            Console.WriteLine();

            Console.WriteLine("InOrder:");
            binaryTree.PrintInOrder(binaryTree.Root);
            Console.WriteLine();

            Console.WriteLine("PostOrder:");
            binaryTree.PrintPostOrder(binaryTree.Root);
            Console.WriteLine();

            Console.WriteLine("BFS:");
            binaryTree.PrintBFS(binaryTree.Root);
            Console.WriteLine();

            Console.WriteLine("DFS:");
            binaryTree.PrintDFS(binaryTree.Root);
            Console.WriteLine();

            Console.ReadLine();
        }
Esempio n. 9
0
 public BinaryTree(T value, BinaryTree <T> leftNode = null, BinaryTree <T> rightNode = null)
 {
     this.Value     = value;
     this.LeftNode  = leftNode;
     this.RightNode = rightNode;
 }
Esempio n. 10
0
 public static void Render(BinaryTree tree)
 {
     Console.Clear();
     RenderNode(tree.Root);
 }
Esempio n. 11
0
        static void Main(string[] args)
        {
            BinaryTree b = new BinaryTree();

            b.insert(18);
            b.insert(10);
            b.insert(28);
            b.insert(9);
            b.insert(7);
            b.insert(19);
            b.insert(22);
            b.insert(13);
            b.insert(34);
            b.insert(30);
            b.insert(55);
            while (true)
            {
                Console.WriteLine("\nMenu");
                Console.WriteLine("1. Iplement insert operation");
                Console.WriteLine("2. Perform inorder traversal");
                Console.WriteLine("3. Perform preorder traversal");
                Console.WriteLine("4. Perform postorder traversal");
                Console.WriteLine("5. Iplement delete operation");
                Console.WriteLine("6. Exit");
                Console.WriteLine("\nEnter your choice (1-6): ");
                char ch = Convert.ToChar(Console.ReadLine());
                Console.WriteLine();
                switch (ch)
                {
                case '1':
                {
                    Console.Write("Enter a word: ");
                    int word = Convert.ToInt32(Console.ReadLine());
                    b.insert(word);
                }
                break;

                case '2':
                {
                    b.inorder(b.ROOT);
                }
                break;

                case '3':
                {
                    b.preorder(b.ROOT);
                }
                break;

                case '4':
                {
                    b.postorder(b.ROOT);
                }
                break;

                case '5':
                {
                    Console.Write("Enter a word: ");
                    int word = Convert.ToInt32(Console.ReadLine());
                    b.remove(word, b.ROOT);
                }
                break;

                case '6':
                    return;

                default:
                {
                    Console.WriteLine("Invalid option");
                    break;
                }
                }
            }
            //b.insert(18);
            //b.insert(10);
            //b.insert(28);
            //b.insert(9);
            //b.insert(7);
            //b.insert(19);
            //b.insert(22);
            //b.insert(13);
            //b.insert(34);
            //b.insert(30);
            //b.insert(55);

            //b.remove(28,b.ROOT);

            Console.ReadLine();
        }
Esempio n. 12
0
 public BinaryTree(T val, BinaryTree <T> parent)
 {
     this.value  = val;
     this.parent = parent;
 }