Trie(字典樹)的Java實現

2021-08-04 22:39:53 字數 1810 閱讀 2085

簡單實現了乙個具有crud操作能力的trie。crud操作即插入(create),讀取(read),改變(update)和刪除(delete)。

刪除是基於當前結點的count實現的。當count為0時代表當前結點應該被完全刪除。

trie的所有操作均為o(n)。其中n為所要操作的單詞的長度。

public keynotfound extends exception 

}public

class

trie

void setend(boolean end)

void increasecount()

int getcount()

void decreasecount()

}private trienode root;

public

trie()

public

void

insert(string word, string data)

// if this is the end of the word, store the data in to the trie and set end.

if (i == chars.length - 1)

// move one level down

currpos = currpos.children[index];}}

public

boolean

search(string word)

if (i == chars.length - 1 && currpos.children[index].isend)

currpos = currpos.children[index];

}return

false;

}public

boolean

startswith(string prefix)

currpos = currpos.children[index];

}return

true;

}public string getdata(string key) throws keynotfound

currpos = currpos.children[index];

}if (!currpos.isend)

return currpos.data;

}public

boolean

setdata(string key, string newdata)

currpos = currpos.children[index];

}if (!currpos.isend)

currpos.data = newdata;

return

true;

}public

void

delete(string word)

char chars = word.tochararray();

trienode currpos = this.root;

for (int i = 0; i < chars.length; i++) else

// if a word is deleted but the prefix still exists, delete the data and flip isend flag.

if (i == chars.length - 1)

}currpos = tmp;}}

}

trie樹 字典樹 java實現

public class trie public void insert string word else current.count current.isend true 怎麼判斷單詞是否存在?被判斷的單詞的字母與根節點下的子節點的字母進行比較,直到匹配到兩者最後乙個字母相同,並且最後乙個節點的i...

Trie樹(字典樹)的實現

trie樹,即字典樹,又稱單詞查詢樹或鍵樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計和排序大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 最大限度地減少無謂的字串比較,查詢效率比雜湊表高。trie的核心思想是空間換時間。利用字串的公共字首來降低查詢時間的...

Trie字典樹陣列實現

include using namespace std const int n 10010 int son n 26 儲存下乙個字元的行 int count n 這個單詞單詞有多少個 int pos 當前新分配的儲存位置 char szstr n 讀取字串 void stringinsert con...