トライサービス

説明

<単語、FREQ>ペアのリストからビルドしようとします。各ノードの上位10セーブ。

例1

Input:  
 <"abc", 2>
 <"ac", 4>
 <"ab", 9>
Output:<a[9,4,2]<b[9,2]<c[2]<>>c[4]<>>> 
Explanation:
			Root
             / 
           a(9,4,2)
          /    \
        b(9,2) c(4)
       /
     c(2)

例2

Input:  
<"a", 10>
<"c", 41>
<"b", 50>
<"abc", 5>
Output: <a[10,5]<b[5]<c[5]<>>>b[50]<>c[41]<>>
その後、再び第1走査数、および解決するために、ツリーを再構築:アイデア
/ ** 
 * TrieNodeの定義:
 *パブリッククラスTrieNode { 
 *公共NavigableMapの<文字、TrieNode>子供。
 *公共の一覧<整数> TOP10。
 *公共TrieNode(){ 
 *子どもたち=新TreeMapを<文字、TrieNode>(); 
 * TOP10 =新しいのArrayList <Integer型>(); 
 *} 
 *} 
 * / 
publicクラスTrieService { 

    プライベートTrieNodeルート= NULL; 

    パブリックTrieService(){ 
        ルート=新しいTrieNode()。
    } 

    公共TrieNode getRoot(){ 
        トライルートの//戻りルート、および
        // lintcodeツリー構造体を印刷します。
        ルートを返します。
    }

    // @paramの単語列
    // @param周波数の整数
    ます。public void挿入(文字列の単語、int型の周波数){ 
        //ここにタラを書く
        TrieNode CUR =ルート。
        INT、N = word.length()。

        以下のために(INT I 0 =、I <N; ++ I){ 
            文字c = word.charAt(I)。
            (!cur.children.containsKey(C))であれば
                cur.children.put(C、新しいTrieNode()); 

            CUR = cur.children.get(C); 
            addFrequency(cur.top10、周波数)。
        } 
    } 

    公共ボイドaddFrequency(一覧<整数> TOP10、INT周波数){ 
        top10.add(周波数)。
        INT、N = top10.size()。
        INTインデックス= N - 1。
        一方、(指数> 0){ 
            IF(top10.get(インデックス)> top10.get(インデックス- 1)){ 
                int型TEMP1 = top10.get(インデックス)
                INT TEMP2 = top10.get(インデックス- 1)。
                top10.set(インデックス、TEMP2)。
                top10.set(インデックス- 1、TEMP1)。
                索引- = 1; 
            }他に
                ブレーク。
        } 
        (N> 10)場合
            top10.remove(N - 1)。
    } 
 }

  

おすすめ

転載: www.cnblogs.com/FLAGyuri/p/12078583.html