예제 #1
0
        static void JoinExample()
        {
            var t1 = new RbTree <int>();

            t1.Add(3);
            t1.Add(2);
            t1.Add(4);
            t1.Add(1);
            t1.Add(5);
            t1.Add(0);
            t1.Add(-1);
            t1.Add(-2);
            t1.Add(-3);
            t1.Add(-4);
            t1.Add(-5);

            var t2 = new RbTree <int>();

            t2.Add(9);
            t2.Add(8);
            t2.Add(10);
            t2.Add(7);
            t2.Add(11);

            WriteLine($"Note: t1's black height > t2's black height in this example." + Environment.NewLine);
            var t3 = RbTree <int> .Join(t1, 6, t2);

            t3.Print();
        }
예제 #2
0
        public void TestT1LargerBh()
        {
            t1.Add(-3);
            t1.Add(-4);
            t1.Add(-5);
            TestContext.Progress.WriteLine($"t1 black height: {t1.Bh}, t2 black height: {t2.Bh}");
            var t3 = Join(t1, 6, t2);

            Assert.AreEqual(true, t3.Validate());
        }
예제 #3
0
        public void TestInsert()
        {
            tree.Add(8);
            tree.Add(5);
            tree.Add(9);
            tree.Add(2);
            tree.Add(6);
            tree.Add(11);
            tree.Add(1);
            tree.Add(0);

            Assert.AreEqual(8, tree.Root.Key);
            Assert.AreEqual(Black, tree.Root.Color);
            Assert.AreEqual(5, tree.Root.Left.Key);
            Assert.AreEqual(Red, tree.Root.Left.Color);
            Assert.AreEqual(9, tree.Root.Right.Key);
            Assert.AreEqual(Black, tree.Root.Right.Color);
            Assert.AreEqual(1, tree.Root.Left.Left.Key);
            Assert.AreEqual(Black, tree.Root.Left.Left.Color);
            Assert.AreEqual(6, tree.Root.Left.Right.Key);
            Assert.AreEqual(Black, tree.Root.Left.Right.Color);
            Assert.AreEqual(11, tree.Root.Right.Right.Key);
            Assert.AreEqual(Red, tree.Root.Right.Right.Color);
            Assert.AreEqual(0, tree.Root.Left.Left.Left.Key);
            Assert.AreEqual(Red, tree.Root.Left.Left.Left.Color);
            Assert.AreEqual(2, tree.Root.Left.Left.Right.Key);
            Assert.AreEqual(Red, tree.Root.Left.Left.Right.Color);

            tree.Add(-1); // here, 5 becomes the root after rebalancing.
            tree.Add(-2);

            Assert.AreEqual(5, tree.Root.Key);
            Assert.AreEqual(Black, tree.Root.Color);
            Assert.AreEqual(1, tree.Root.Left.Key);
            Assert.AreEqual(Red, tree.Root.Left.Color);
            Assert.AreEqual(-1, tree.Root.Left.Left.Key);
            Assert.AreEqual(Black, tree.Root.Left.Left.Color);
            Assert.AreEqual(2, tree.Root.Left.Right.Key);
            Assert.AreEqual(Black, tree.Root.Left.Right.Color);
            Assert.AreEqual(-2, tree.Root.Left.Left.Left.Key);
            Assert.AreEqual(Red, tree.Root.Left.Left.Left.Color);
            Assert.AreEqual(0, tree.Root.Left.Left.Right.Key);
            Assert.AreEqual(Red, tree.Root.Left.Left.Right.Color);
            Assert.AreEqual(8, tree.Root.Right.Key);
            Assert.AreEqual(Red, tree.Root.Right.Color);
            Assert.AreEqual(6, tree.Root.Right.Left.Key);
            Assert.AreEqual(Black, tree.Root.Right.Left.Color);
            Assert.AreEqual(9, tree.Root.Right.Right.Key);
            Assert.AreEqual(Black, tree.Root.Right.Right.Color);
            Assert.AreEqual(11, tree.Root.Right.Right.Right.Key);
            Assert.AreEqual(Red, tree.Root.Right.Right.Right.Color);

            Assert.AreEqual(true, tree.Validate());
        }
예제 #4
0
 public void Setup()
 {
     tree = new RbTree <int>();
     tree.Add(8);
     tree.Add(5);
     tree.Add(9);
     tree.Add(2);
     tree.Add(6);
     tree.Add(11);
     tree.Add(1);
     tree.Add(0);
     tree.Add(-1);
     tree.Add(-2);
 }
예제 #5
0
        public void Setup()
        {
            t1 = new RbTree <int>();
            t1.Add(3);
            t1.Add(2);
            t1.Add(4);
            t1.Add(1);
            t1.Add(5);
            t1.Add(0);
            t1.Add(-1);
            t1.Add(-2);

            t2 = new RbTree <int>();
            t2.Add(9);
            t2.Add(8);
            t2.Add(10);
            t2.Add(7);
            t2.Add(11);
        }
예제 #6
0
        public override IEnumerable <TElement> Sort(IEnumerable <TElement> collection, IComparer <TElement> comparer, bool parallel)
        {
            var tree = new RbTree(comparer);

            foreach (var element in collection)
            {
                tree.Add(element);
            }

            return(tree);
        }
        public override IEnumerable <TElement> Sort(IEnumerable <TElement> collection, IComparer <TElement> comparer, bool parallel)
        {
            var array = collection.ToArray();
            var tree  = new RbTree(comparer, array);

            for (int i = 0; i < array.Length; i++)
            {
                tree.Add(i);
            }

            return(tree);
        }
예제 #8
0
        static void GenerateFile(string filename)
        {
            using var writer = File.CreateText(filename);

            var tree = new RbTree <string, string>((one, two) => one.CompareTo(two));

            var generator = new StringGenerator();

            for (int i = 0; i < 100_000; i++)
            {
                var str = generator.GenerateString();

                tree.Add(str, str);
                writer.WriteLine(str);
            }
        }
예제 #9
0
        static void GenerateTree()
        {
            WriteLine("Enter a size, start value, and end value, separated by spaces.");
            var s = ReadLine() !.Trim();
            var l = s.Split().Select(x => int.Parse(x)).ToList();

            var(size, from, to) = (l[0], l[1], l[2]);
            var tree        = new RbTree <int>();
            var rng         = RandomSingleton.GetInstance();
            var toInclusive = to + 1;

            watch.Start();
            for (int i = 0; i < size; ++i)
            {
                int j = rng.Next(from, toInclusive);
                tree.Add(j);
            }
            watch.Stop();

            WriteLine($"Added {size} elements in {watch.ElapsedMilliseconds} milliseconds.");
            WriteLine("Display tree? (Y/n)");
            if (ReadLine() !.Trim().ToLower() == "y")
            {
                tree.Print();
            }
            var list = tree.InOrderKeys();

            Shuffle(list);

            watch.Restart();
            foreach (var key in list)
            {
                tree.Remove(key);
            }
            watch.Stop();
            WriteLine($"Removed {size} elements in {watch.ElapsedMilliseconds} milliseconds.");
        }
예제 #10
0
 public void Setup()
 {
     tree = new RbTree <int>();
     tree.Add(3);
     tree.Add(2);
     tree.Add(4);
     tree.Add(1);
     tree.Add(5);
     tree.Add(0);
     tree.Add(-1);
     tree.Add(-2);
     tree.Add(-3);
     tree.Add(-4);
     tree.Add(-5);
 }
예제 #11
0
        static void SubtreeCheck()
        {
            var t1 = new RbTree <int>();

            t1.Add(3);
            t1.Add(2);
            t1.Add(4);
            t1.Add(1);
            t1.Add(5);
            t1.Add(0);
            t1.Add(-1);
            t1.Add(-2);
            RbTree <int> .Node subroot = t1.Add(-3);
            t1.Add(-4);
            t1.Add(-5);

            t1.Print();

            WriteLine(Environment.NewLine);

            var t2 = t1.Subtree(subroot);

            t2.Print();

            t1.Remove(-5);

            WriteLine(Environment.NewLine);

            t2.Print();
        }
예제 #12
0
        public void Test()
        {
            var t1 = new RbTree <int>();

            t1.Add(3);
            t1.Add(2);
            t1.Add(4);
            t1.Add(1);
            t1.Add(5);
            t1.Add(0);
            t1.Add(-1);
            t1.Add(-2);
            t1.Add(-3);
            t1.Add(-4);
            t1.Add(-5);

            var t2 = t1.Subtree(t1.Root.Left.Left);

            t1.Remove(-5);

            Assert.AreEqual(true, t2.Contains(-5));
            Assert.AreEqual(true, t2.Validate());
        }