public VEBTree(uint k) { U = Convert.ToUInt32(Math.Pow(2, k)); if (k % 2 == 0) { LowerK = UpperK = k / 2; UpperU = LowerU = Convert.ToUInt32(Math.Pow(2, k / 2)); } else { LowerK = k / 2; UpperK = LowerK + 1; LowerU = Convert.ToUInt32(Math.Pow(2, k / 2)); UpperU = LowerU << 1; } if (U == 2) { Summary = null; Cluster = null; } else { Summary = new VEBTree(UpperK); Cluster = new VEBTree[UpperU]; for (uint i = 0; i < UpperU; i++) { Cluster[i] = new VEBTree(LowerK); } } }
public static void TestValidation() { VEBTree k = new VEBTree(5); for (uint i = 0; i < 0x20; i++) { Console.WriteLine($"Inserting {i}"); k.Insert(i); } for (uint i = 0; i < 0x20; i++) { Console.WriteLine($"Node {i}: IsMember={k.IsMember(i)}, Predecessor={k.Predecessor(i)}, Successor={k.Successor(i)}."); } uint[] numberToDelete = { 1, 2, 4, 6, 11, 31 }; foreach (var a in numberToDelete) { k.Delete(a); } for (uint i = 0; i < 0x20; i++) { Console.WriteLine($"Node {i} IsMemeber={k.IsMember(i)}"); } }