Esempio n. 1
0
            public void search(int k)
            {
                BtreeNode cur = root;

                while (cur != null)
                {
                    if (cur.val == k)
                    {
                        Console.WriteLine("Find");
                        break;
                    }
                    else if (cur.val > k)
                    {
                        cur = cur.left;
                    }
                    else
                    {
                        cur = cur.right;
                    }
                }

                if (cur == null)
                {
                    Console.WriteLine("Not Find");
                }
            }
Esempio n. 2
0
        private static void ValidateSubtree(BtreeNode <int, int> root, BtreeNode <int, int> BtreeNode, int degree, int BtreeNodeMin, int BtreeNodeMax, Dictionary <int, List <Entry <int, int> > > foundKeys)
        {
            if (root != BtreeNode)
            {
                Assert.IsTrue(BtreeNode.Entries.Count >= degree - 1);
                Assert.IsTrue(BtreeNode.Entries.Count <= (2 * degree) - 1);
            }

            for (int i = 0; i <= BtreeNode.Entries.Count; i++)
            {
                int subtreeMin = BtreeNodeMin;
                int subtreeMax = BtreeNodeMax;

                if (i < BtreeNode.Entries.Count)
                {
                    var entry = BtreeNode.Entries[i];
                    UpdateFoundKeys(foundKeys, entry);
                    Assert.IsTrue(entry.Key >= BtreeNodeMin && entry.Key <= BtreeNodeMax);

                    subtreeMax = entry.Key;
                }

                if (i > 0)
                {
                    subtreeMin = BtreeNode.Entries[i - 1].Key;
                }

                if (!BtreeNode.IsLeaf)
                {
                    Assert.IsTrue(BtreeNode.Children.Count >= degree);
                    ValidateSubtree(root, BtreeNode.Children[i], degree, subtreeMin, subtreeMax, foundKeys);
                }
            }
        }
Esempio n. 3
0
        public static void ValidateTree(BtreeNode <int, int> tree, int degree, params int[] expectedKeys)
        {
            var foundKeys = new Dictionary <int, List <Entry <int, int> > >();

            ValidateSubtree(tree, tree, degree, int.MinValue, int.MaxValue, foundKeys);
            Assert.AreEqual(0, expectedKeys.Except(foundKeys.Keys).Count());
            foreach (var keyValuePair in foundKeys)
            {
                Assert.AreEqual(1, keyValuePair.Value.Count);
            }
        }
Esempio n. 4
0
        public void InsertMultipleBtreeNodesToSplitV2()
        {
            var btree = new BTree <int, int>(Degree);

            for (int i = 0; i < this.testKeyData.Length; i++)
            {
                this.InsertTestDataAndValidateTree(btree, i);
            }
            BtreeNode <int, int> temp = btree.Root;

            Display(temp);
            //Assert.AreEqual(3, btree.Height);
        }
Esempio n. 5
0
        public void CreateBTree()
        {
            var btree = new BTree <int, int>(Degree);

            BtreeNode <int, int> root = btree.Root;

            Assert.IsNotNull(root);
            Assert.IsNotNull(root.Entries);
            Assert.IsNotNull(root.Children);
            Assert.AreEqual(0, root.Entries.Count);
            Assert.AreEqual(0, root.Children.Count);

            //Console.WriteLine(root.Children.Count);
        }
Esempio n. 6
0
 private static void Display(BtreeNode <int, int> btree)
 {
     foreach (var bt in btree.Children)
     {
         foreach (var item in bt.Entries)
         {
             Console.Write(item.Key + "|");
         }
         if (bt.Children != null)
         {
             Console.WriteLine();
             Display(bt);
         }
     }
 }
Esempio n. 7
0
            public void insert(int num)
            {
                BtreeNode temp = new BtreeNode();
                BtreeNode cur;
                BtreeNode parent;

                temp.val   = num;
                temp.left  = null;
                temp.right = null;

                if (root == null)
                {
                    root = temp;
                }

                else
                {
                    cur    = root;
                    parent = cur;
                    while (cur != null)
                    {
                        parent = cur;
                        if (num < cur.val)
                        {
                            cur = cur.left;
                        }
                        else
                        {
                            cur = cur.right;
                        }
                    }
                    if (num < parent.val)
                    {
                        parent.left = temp;
                    }
                    else
                    {
                        parent.right = temp;
                    }
                }
            }
Esempio n. 8
0
 public Bst()
 {
     root = null;
 }
Esempio n. 9
0
 public BtreeNode()
 {
     left  = null;
     right = null;
 }
Esempio n. 10
0
            public void delete(int k)
            {
                BtreeNode target = root;
                BtreeNode lastnode;
                BtreeNode targetparent = root;
                BtreeNode parentoflastnode;

                if (root == null)
                {
                    Console.WriteLine(" BST is Empty");
                }
                else
                {
                    while (target != null)
                    {
                        if (target.val == k)
                        {
                            break;
                        }
                        else if (target.val > k)
                        {
                            targetparent = target;
                            target       = target.left;
                        }
                        else
                        {
                            targetparent = target;
                            target       = target.right;
                        }
                    }

                    if (root == null)
                    {
                        Console.WriteLine("Not Exist number");
                    }
                    else
                    {
                        lastnode = target;
                        if (lastnode.left != null)
                        {
                            parentoflastnode = lastnode;
                            lastnode         = lastnode.left;
                            while (lastnode.right != null)
                            {
                                parentoflastnode = lastnode;
                                lastnode         = lastnode.right;
                            }

                            if (targetparent.right.val == target.val)
                            {
                                targetparent.right = lastnode;
                            }
                            else
                            {
                                targetparent.left = lastnode;
                            }

                            if (parentoflastnode.val != target.val)
                            {
                                parentoflastnode.right = null;
                                lastnode.left          = target.left;
                            }
                            lastnode.right = target.right;


                            /* if(parentoflastnode.val != target.val)
                             *   lastnode.left = parentoflastnode;*/
                            target.left  = null;
                            target.right = null;


                            if (root.val == k)
                            {
                                root = lastnode;
                            }
                        }
                        else if (lastnode.left == null && lastnode.right != null)
                        {
                            parentoflastnode = lastnode;
                            lastnode         = lastnode.right;
                            while (lastnode.left != null)
                            {
                                parentoflastnode = lastnode;
                                lastnode         = lastnode.left;
                            }

                            if (targetparent.right.val == target.val)
                            {
                                targetparent.right = lastnode;
                            }
                            else
                            {
                                targetparent.left = lastnode;
                            }

                            if (parentoflastnode.val != target.val)
                            {
                                parentoflastnode.left = null;
                                lastnode.right        = target.right;
                            }

                            target.left  = null;
                            target.right = null;
                        }
                        else if (lastnode.left == null && lastnode.right == null)
                        {
                            if (targetparent.right.val == target.val)
                            {
                                targetparent.right = null;
                            }
                            else
                            {
                                targetparent.left = null;
                            }
                        }
                    }
                }
            }