static void Main(string[] args)
        {
            // Create the tries
            var binaryRoot     = new BinaryNode("Root");
            var compressedRoot = new CompressedNode("Root");
            var multibitRoot   = new MultibitNode()
            {
                Stride = 3
            };

            // Generate IPs
            var gen = new AddressGenerator().GenerateAddress();
            var db  = gen.Take(10).ToArray();

            // Add children to tries
            foreach (var ip in db)
            {
                binaryRoot.AddChild(ip.MaskedIPv4, ip.BinaryString);
                compressedRoot.AddChild(ip.MaskedIPv4, ip.BinaryString);
                multibitRoot.AddChild(ip.MaskedIPv4, ip.BinaryString);
            }
            compressedRoot.Compress();

            // Perform a lookup
            var tosearch = new Address("132.15.162.33/17");

            Console.WriteLine($"Binary: {binaryRoot.Lookup(tosearch.BinaryString)}");
            Console.WriteLine($"Compressed: {compressedRoot.Lookup(tosearch.BinaryString)}");
            Console.WriteLine($"Multibit: {multibitRoot.Lookup(tosearch.BinaryString, "Root")}");

            Console.ReadLine();
        }
        public static void CreateDatabase(IEnumerable <Address> ips)
        {
            BinaryRoot = new BinaryNode()
            {
                NextHop = "Root"
            };
            CompressedRoot = new CompressedNode()
            {
                NextHop = "Root"
            };
            MultibitRoot = new MultibitNode()
            {
                Stride = MultibitStride
            };

            foreach (var ip in ips)
            {
                BinaryRoot.AddChild(ip.MaskedIPv4, ip.BinaryString);
                CompressedRoot.AddChild(ip.MaskedIPv4, ip.BinaryString);
                MultibitRoot.AddChild(ip.MaskedIPv4, ip.BinaryString);
            }

            CompressedRoot.Compress();

            Main.UpdateTreeViews();
        }