あなたがやろうとしていることをよりよく理解するために、あなたのコードと入力データをもう少し共有していただけませんか?
Java の Trie データ構造に関するこのスタック オーバーフロー ディスカッションが役立つ場合があります: Trie データ構造 - Java。次のリンク(回答の1つから)が非常に役立つことがわかりました:https://forums.oracle.com/forums/thread.jspa?messageID=8787521。
編集: https://forums.oracle.com/forums/thread.jspa?messageID=8787521およびJava ツリーのデータ構造の助けを借りて? 、次のコードを作成しました。
public Stack<List<Character>> createTreeAndGetAllWords() {
// Create the tree.
final Tree<Character> rootTree = new Tree<Character>('*');
final Tree<Character> cTree = rootTree.addChild(new Tree<Character>('c'));
final Tree<Character> aTree = cTree.addChild(new Tree<Character>('a'));
aTree.addChild(new Tree<Character>('r'));
aTree.addChild(new Tree<Character>('t'));
final Tree<Character> dTree = rootTree.addChild(new Tree<Character>('d'));
final Tree<Character> oTree = dTree.addChild(new Tree<Character>('o'));
oTree.addChild(new Tree<Character>('g'));
// Traverse the tree.
return getAllWords(rootTree);
}
private Stack<List<Character>> getAllWords(final Tree<Character> tree) {
final Stack<List<Character>> listStack = new Stack<List<Character>>();
for (final Tree<Character> child : tree.getChildren()) {
listStack.push(new ArrayList<Character>());
traverseSubtree(child, listStack);
}
return listStack;
}
private void traverseSubtree(final Tree<Character> tree, final Stack<List<Character>> listStack) {
final List<Character> currentWord = listStack.pop();
if (tree.hasChildren()) {
for (final Tree<Character> child : tree.getChildren()) {
final List<Character> extendedWord = new ArrayList<Character>(currentWord);
extendedWord.add(tree.getValue());
listStack.push(extendedWord);
traverseSubtree(child, listStack);
}
} else {
currentWord.add(tree.getValue());
listStack.push(currentWord);
}
}
public class Tree<T> {
private T value;
private List<Tree<T>> children;
public Tree(T value) {
this.value = value;
this.children = new ArrayList<Tree<T>>();
}
public T getValue() {
return value;
}
public boolean hasChildren() {
return children.size() > 0;
}
public Tree<T> addChild(Tree<T> child) {
children.add(child);
return child;
}
public List<Tree<T>> getChildren() {
return children;
}
}
createTreeAndGetAllWords を呼び出すと、[c, a, r]、[c, a, t]、および [d, o, g] の 3 つの文字リストとして予期した単語が返されます。
for (final List<Character> word : createTreeAndGetAllWords()) {
System.out.println("word = " + word);
}
乾杯、フリーク