用Trie樹實(shí)現(xiàn)號(hào)碼區(qū)域查找

  • TrieNode.java
/**

 * 給定一個(gè)固定電話號(hào)碼,找出這個(gè)號(hào)碼對(duì)應(yīng)的區(qū)域。固定電話號(hào)碼都是以0開始的多位數(shù)字,可以通過(guò)給定電話號(hào)碼的前綴找出對(duì)已ing的區(qū)域

 * 如:

 * 0995:新疆:托克遜縣

 * 0856:貴州:銅仁

 * 0775:廣西:玉林

 * 可以采用數(shù)字搜索樹算法快速查找電話號(hào)碼前綴。*/

public final class TrieNode {

    protected TrieNode[] children;//孩子節(jié)點(diǎn)

    protected char splitChar;//分隔字符

    protected String area;//電話所屬地區(qū)信息

    

    protected TrieNode(char splitchar){

        children=new TrieNode[10];

        area=null;

        this.splitChar=splitchar;

    }

    /**

     * 加載詞,形成數(shù)字搜索樹

     * param:string輸入的電話號(hào)碼

     * param:root樹根

     * area:所在區(qū)域*/

    void addWord(String string, TrieNode root,String area){

        TrieNode tNode=root;

        //第一個(gè)字符都是0,作為根節(jié)點(diǎn)

        for(int i=1;i<string.length();i++){

            char c0=string.charAt(i);

            int ind=Integer.parseInt(string.substring(i, i+1));

            TrieNode tempNode=tNode.children[ind];

            if(null==tempNode){

                tempNode=new TrieNode(c0);

            }

            if(i==string.length()-1){

                tempNode.area=area;

            }

            tNode.children[ind]=tempNode;

            tNode=tempNode;

        }

    }

    /**

     * 查詢的過(guò)程對(duì)于查詢?cè)~來(lái)說(shuō),從前往后一個(gè)字符一個(gè)字符的匹配。對(duì)于Trie樹來(lái)說(shuō),是從根節(jié)點(diǎn)往下匹配的過(guò)程。

     * 從給定電話號(hào)碼搜索前綴的方法如下:*/

    public String search(String tel,TrieNode root){

        TrieNode tNode=root;

        for(int i=1;i<tel.length();i++){

            tNode=tNode.children[(tel.charAt(i)-'0')];

            if(null!=tNode.area){

                return tNode.area;

            }

        }

        //沒(méi)找到

        return null;

    }

}
  • TrieTreeTest.java

public class TrieTreeTest {

    public static void main(String args[]){

        TrieNode root=new TrieNode('0');

        root.addWord("0995", root, "新疆:托克遜縣");

        root.addWord("0856", root, "貴州:銅仁");

        root.addWord("0775", root, "廣西:玉林");

        String result=root.search("0775", root);

        System.out.println("0775:"+result);

        result=root.search("0856", root);

        System.out.println("0856:"+result);

    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容