private byte[][] GetAll(UnmanagedCritBitTreeNode *node)
        {
            if (node->Type == 0)
            {
                var bytes = new byte[node->KeyLength];
                Marshal.Copy(new IntPtr(&node->Key), bytes, 0, node->KeyLength);
                return(new byte[1][] { bytes });
            }

            var children1 = GetAll(node->Child1);
            var children2 = GetAll(node->Child2);

            var result          = new byte[children1.Length + children2.Length][];
            int currentPosition = 0;

            for (int i = 0; i < children1.Length; i++)
            {
                result[currentPosition++] = children1[i];
            }

            for (int i = 0; i < children2.Length; i++)
            {
                result[currentPosition++] = children2[i];
            }

            return(result);
        }
 public CritBitTreeNodeEnumerator(UnmanagedCritBitTreeNode *rootNode)
 {
     _all = GetAll(rootNode);
 }