Moyen facile de trouver des sous-arbre dans un Arbre

Je suis en train d'écrire un code qui utilise un Arbre (un régulier arbre qui peut avoir un nombre illimité de nœuds, mais pas de crossover, c'est à dire deux nœuds parents ne pointera pas le même nœud enfant). En tout cas, deux choses:

1) existe-il des algorithmes les plus connus pour la recherche d'un sous-arbre dans un arbre.

2) existe-il des bibliothèques Java (ou bibliothèques) qui mettent déjà en œuvre de cet algorithme? Même si on n'y fait, quelqu'un peut-il recommander des bons à des fins générales Java arbre de la bibliothèque?

Je veux utiliser ces arbres pour maintenir les données dans un format arbre, pas pour leurs capacités de recherche.

Pour développer un peu: je suis à l'aide de l'arbre en tant que partie du jeu afin de conserver un historique de ce qui se passe lorsque certains événements se produisent. Par exemple, l'Un peut frapper un B qui peut frapper deux Un qui peut frapper un autre deux Un etc de.

Qui ressemblerait à quelque chose comme:

    A
    |
    B
   /
  A 
 / \  
A   A
   / \
  A   A

Bien sûr, il ya plus que A et B. Ce que je veux faire, c'est (pour un système de réalisation), c'est être capable de dire quand, disons un Un a frappé deux A:

  A
 / \
A   A

Je veux être en mesure de facilement savoir si le premier arbre ne contient que des sous-arborescence. Et je ne veux pas avoir à écrire tout le code pour le faire si je n'ai pas 🙂

OriginalL'auteur cdmckay | 2009-02-25