、言葉がで読めば入れする必要はありません、これだけの拡張により、より良いため
BinaryTree balance(BinaryTree tree)
{
BinaryTree out = new BinaryTree();
String[] values = tree.toArray(); //a sorted array
for(int i = Integer.highestOneBit(values.length); i > 0; i >>= 1)
for(int j = i; j <= values.length; j += i)
out.add(values[j - 1]);
return out;
}
に要素を追加し、新しいものを構築する方が簡単な場合がありツリーにとArrays.sort(Object[])
は、あなたが実際にこのデータを使用しているもの(単にルックアップテーブル?)代わりにHashSet
を使用する方が速いかもしれによって
List<String> wordList = new LinkedList<String>();
BufferedReader reader = [...];
for(String line = reader.readLine(); line != null; line = reader.readLine())
wordList.add(line);
String[] words = wordList.toArray(new String[0]);
Arrays.sort(words);
BinaryTree tree = new BinaryTree();
for(int i = Integer.highestOneBit(words.length); i > 0; i >>= 1)
for(int j = i; j <= words.length; j += i)
out.add(words[j - 1]);
速くなる可能性がある、すぐにソート
Set<String> dict = new HashSet<String>();
BufferedReader reader = [...];
for(String line = reader.readLine(); line != null; line = reader.readLine())
dict.add(line);
A.これは要素が追加されるたびに自己バランスが取られるか、B.頻繁に均衡がとれたツリーを作り直すことです – phflack
[Self-balancing binary search tree](https:// ja。 wikipedia.org/wiki/Self-balancing_binary_search_tree)。それはかなり複雑になる可能性があります。 – rgettman
あなたの質問に答えた回答はありますか?もしそうなら、最も役に立つ答えを受け入れてください。 – Keara