То, что вы описываете, не является вполне радикальным деревом ... в радикальном дереве вы можете иметь более одного символа в узле, и нет верхней границы для количества дочерних узлов ,
То, что вы описываете, звуки более ограничены алфавитом ... каждый узел может быть z, за которым может следовать другая буква, z и т. Д. Различие имеет решающее значение для структуры данных, которую вы выбираете для хранения следующей указатели узлов.
В описываемом вами дереве самой простой структурой может быть простой массив указателей ... все, что вам нужно сделать, - это преобразовать символ (например, «A») в его значение ascii («65»), и вычтите начальное смещение (65), чтобы определить, какой «следующий узел» вы хотите. Занимает больше места, но очень быстро вставляет и обходит.
В истинном основополагающем дереве у вас может быть 3, 4, 78 или 0 дочерних узлов, а ваш список «следующих узлов» будет иметь издержки на сортировку, вставку и удаление. Намного медленнее.
Я не могу говорить с Java, но если бы я реализовывал настраиваемое основное дерево в C #, я бы использовал одну из встроенных коллекций .NET. Написание собственного отсортированного списка на самом деле не помогает вам изучать древовидные концепции, а встроенные оптимизации коллекций .NET непросты. Тогда ваш код прост: найдите ваш следующий узел; если существует, возьми его и иди; если нет, добавьте его в коллекцию следующего узла.
Какая коллекция вы используете, зависит от того, что именно вы реализуете через дерево ... каждый тип дерева включает компромиссы между временем вставки, временем поиска и т. Д. Выбор, который вы делаете, зависит от того, что наиболее важно для приложения, не дерево.
Имеет смысл?