前綴樹

前綴樹

使用一個(gè)樹結(jié)構(gòu)記錄一組數(shù)據(jù),數(shù)據(jù)可以是字符串?dāng)?shù)組。

public class TrieTree {
    public static class TrieNode{
        public int pass;//經(jīng)過該節(jié)點(diǎn)的字符的數(shù)量
        public int end;//以該節(jié)點(diǎn)為終的字符的數(shù)量
        public TrieNode[] nexts;

        public TrieNode(){
            pass = 0;
            end = 0;
            //nexts[0] == null 沒有走向'a'的路
            //nexts[0] 帅韧!= null 有走向'a'的路
            //...
            //nexts[25] 务唐!= null 有走向'z'的路
            nexts = new TrieNode[26]; //HashMap<Char, Node> nexts;表示很多的字符服球,
                                      // Char表示某個(gè)字符汛兜,Node表示下一個(gè)節(jié)點(diǎn)
                                      //TreeMap<Char, Node> nexts;有序表
        }

    }

    public static class Trie{
        private TrieNode root;

        public Trie(){
            root = new TrieNode();
        }

        public void insert(String word){
            if(word == null){
                return;
            }
            char[] chs = word.toCharArray();
            TrieNode node = root;
            node.pass++;//邊的end的pass++
            int index = 0;
            for (int i = 0; i < chs.length; i++) {
                index = chs[i] - 'a';
                if(node.nexts[index] == null){
                    node.nexts[index] = new TrieNode();
                }
                node = node.nexts[index];
                node.pass++;
            }
            node.end++;
        }

        //刪除前綴樹中的某個(gè)單詞,刪一個(gè)
        public void delete(String word){
            if(search(word) != 0){
                char[] chs = word.toCharArray();
                TrieNode node = root;
                node.pass--;
                int index = 0;
                for (int i = 0; i < chs.length; i++) {
                    index = chs[i] - 'a';
                    if(--node.nexts[index].pass == 0){
                        node.nexts[index] = null;
                        return;
                    }
                    node = node.nexts[index];
                }
                node.end--;
            }
        }

        //查看前綴樹里有多少word
        public int search(String word){
            if(word == null){
                return 0;
            }
            char[] chs = word.toCharArray();
            TrieNode node = root;
            int index = 0;
            for (int i = 0; i < chs.length; i++) {
                index = chs[i] - 'a';
                if(node.nexts[index] == null){
                    return 0;
                }
                node = node.nexts[index];
            }
            return node.end;
        }
        //所有加入的字符串中,有幾個(gè)是以pre這個(gè)字符串為前綴的
        public int prefixNumber(String pre){
            if(pre == null){
                return 0;
            }
            char[] chs = pre.toCharArray();
            TrieNode node = root;
            int index = 0;
            for (int i = 0; i < chs.length; i++) {
                index = chs[i] - 'a';
                if(node.nexts[index] == null){
                    return 0;
                }
                node = node.nexts[index];
            }
            return node.pass;
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哨鸭,一起剝皮案震驚了整個(gè)濱河市民宿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌像鸡,老刑警劉巖活鹰,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異只估,居然都是意外死亡志群,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門蛔钙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锌云,“玉大人,你說我怎么就攤上這事吁脱∩O眩” “怎么了彬向?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長攻冷。 經(jīng)常有香客問我娃胆,道長,這世上最難降的妖魔是什么讲衫? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮孵班,結(jié)果婚禮上涉兽,老公的妹妹穿的比我還像新娘。我一直安慰自己篙程,他們只是感情好枷畏,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虱饿,像睡著了一般拥诡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上氮发,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天渴肉,我揣著相機(jī)與錄音,去河邊找鬼爽冕。 笑死仇祭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颈畸。 我是一名探鬼主播乌奇,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼眯娱!你這毒婦竟也來了礁苗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤徙缴,失蹤者是張志新(化名)和其女友劉穎试伙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體于样,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迁霎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了百宇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片考廉。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖携御,靈堂內(nèi)的尸體忽然破棺而出昌粤,到底是詐尸還是另有隱情既绕,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布涮坐,位于F島的核電站凄贩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏袱讹。R本人自食惡果不足惜疲扎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捷雕。 院中可真熱鬧椒丧,春花似錦、人聲如沸救巷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浦译。三九已至棒假,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間精盅,已是汗流浹背帽哑。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叹俏,地道東北人祝拯。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像她肯,于是被迫代替她去往敵國和親佳头。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 本文只是自己的筆記晴氨,并不具備過多的指導(dǎo)意義康嘉。 前綴樹 何為前綴樹 前綴樹又名字典樹,單詞查找樹籽前,Trie樹亭珍,是一種...
    kirito_song閱讀 4,183評(píng)論 0 13
  • 什么是字典樹 是一種樹形結(jié)構(gòu),是一種哈希樹的變種枝哄。典型應(yīng)用是用于統(tǒng)計(jì)肄梨,排序和保存大量的字符串(但不僅限于字符串),...
    叫我胖虎大人閱讀 404評(píng)論 0 4
  • 前綴樹是什么 前綴樹是一種樹結(jié)構(gòu),其中的鍵通常是字符串挠锥。與二叉查找樹不同众羡,鍵不是直接保存在節(jié)點(diǎn)中,而是由節(jié)點(diǎn)在樹中...
    名字是亂打的閱讀 595評(píng)論 0 1
  • 對(duì)字典樹的理解: a.Trie字典樹又可以稱為前綴樹,是一種真正為字典設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu),其中的核心實(shí)現(xiàn)就包含了字典M...
    SeekerLinJunYu閱讀 267評(píng)論 0 0
  • 前綴樹說明 前綴樹Trie是一種用于字符串搜索的樹形數(shù)據(jù)結(jié)構(gòu)蓖租。 我們舉個(gè)例子來說明前綴樹是如何表示的粱侣。 有三個(gè)單詞...
    愈強(qiáng)閱讀 507評(píng)論 0 0