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

  • TrieNode.java
/**

 * 給定一個固定電話號碼,找出這個號碼對應的區(qū)域。固定電話號碼都是以0開始的多位數(shù)字,可以通過給定電話號碼的前綴找出對已ing的區(qū)域

 * 如:

 * 0995:新疆:托克遜縣

 * 0856:貴州:銅仁

 * 0775:廣西:玉林

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

public final class TrieNode {

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

    protected char splitChar;//分隔字符

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

    

    protected TrieNode(char splitchar){

        children=new TrieNode[10];

        area=null;

        this.splitChar=splitchar;

    }

    /**

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

     * param:string輸入的電話號碼

     * param:root樹根

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

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

        TrieNode tNode=root;

        //第一個字符都是0,作為根節(jié)點

        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;

        }

    }

    /**

     * 查詢的過程對于查詢詞來說,從前往后一個字符一個字符的匹配。對于Trie樹來說,是從根節(jié)點往下匹配的過程。

     * 從給定電話號碼搜索前綴的方法如下:*/

    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;

            }

        }

        //沒找到

        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);

    }

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

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

  • 最近在閑看博客時看到一篇專門寫紅黑樹的實現(xiàn)原理,以Java的TreeMap為例講解,寫的很不錯,仔細看下來發(fā)現(xiàn)很多...
    locoder閱讀 3,846評論 0 11
  • 二叉查找樹的性質(zhì) 若任意節(jié)點的左子樹不為空,則左子樹上所有結(jié)點的值均小于它的根結(jié)點的值; 任意節(jié)點的右子樹不為空,...
    spike15閱讀 529評論 2 1
  • 查找二叉樹首先也是個二叉樹,符合二叉樹的一切特點。 原文地址:http://blog.csdn.net/qq_25...
    喵了個嗚s閱讀 456評論 0 2
  • 考研到底是事業(yè)發(fā)展的追求還是人生發(fā)展的追求? 嬰兒看到小狗笑了; 幼兒看到嬰兒笑了; 少年看到幼兒笑了; 青年看到...
    金金心閱讀 290評論 0 0

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