Я пишу некоторый код, который использует Дерево (обычное дерево, которое может иметь неограниченное количество узлов, но без пересечения, т.е. два родительских узла не будут указывать на один и тот же дочерний узел). Во всяком случае, две вещи:
1) Существуют ли известные алгоритмы поиска поддерева в дереве.
2) Есть ли библиотеки Java (или библиотеки в этом отношении), которые уже реализуют этот алгоритм? Даже если их нет, кто-нибудь может порекомендовать какую-либо хорошую библиотеку дерева Java общего назначения?
Я хочу использовать эти деревья для хранения данных в древовидном формате, а не для их возможностей поиска.
Чтобы немного расширить: я использую дерево как часть игры, чтобы вести историю того, что происходит, когда происходят определенные события. Например, A может поразить B, который может поразить два A, которые могут поразить еще два A и т. Д.
Это будет выглядеть примерно так:
A
|
B
/
A
/ \
A A
/ \
A A
Конечно, есть нечто большее, чем просто А и В. То, что я хочу сделать, - это то, что (для системы достижений) сможет определить, когда, скажем, А достиг двух А:
A
/ \
A A
Я хочу иметь возможность легко узнать, содержит ли первое дерево это поддерево. И я не хочу писать весь код для этого, если мне не нужно:)