Если вы используете этот trie для хранения IP-номеров в качестве элементов фиксированной длины, то это определенно не правильный путь. Дело здесь в том, что PT особенно полезна для хранения данных переменной длины.
Если вы храните части IP-номеров в качестве префиксов переменной длины, тогда PT является хорошим выбором.
В этом случае да, ваши ключи должны иметь разную длину.
Предположим, вы сохраняете префикс «192.168» в двоичном формате 0xC0 0xA8, вы добавляете это как первый ключ.
Затем, при поиске IP-адреса, такого как 192.168.1.1, вы можете получить информацию о том, что ваш trie содержит 192.168, который является префиксом того, что вы ищете.
Все, что вам нужно сделать, это сохранить «общую часть» во время прохождения trie.
Это незначительное дополнение к реализации this. Просто убедитесь, что, когда вы спускаетесь вниз, вы храните общую часть где-то в параметрах рекурсивной функции.
Для хорошего понимания Patricia trie я бы предложил прочитать Robert Sedgewick's Algorithms book, который является отличным источником знаний.
EDIT: Существует одна проблема при хранении строк C в PT. Этот trie предназначен для хранения двоичных данных, но вас интересует только получение всех байтов. Убедитесь, что вы храните общую часть префикса только в том случае, если его размер в битах кратен 8. Неправильный пример: у вас есть ключ в вашем дереве: 0xC0 0xA5, и вы смотрите на 0xC0 0xA6. Ваш обход остановится, когда общая часть «0xC0 0xA», но вы заинтересованы в том, чтобы принимать только «0xC0». Поэтому не забудьте сохранить общие байты, а не биты.