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"); } }
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); } } }
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); } }
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); }
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); }
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); } } }
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; } } }
public Bst() { root = null; }
public BtreeNode() { left = null; right = null; }
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; } } } } }