Java实现一个简单的前缀树

import java.util.*;

class TrieNode {
    private Map<Character, TrieNode> children;
    private boolean isWord;

    public TrieNode() {
        children = new HashMap<>();
        isWord = false;
    }

    public Map<Character, TrieNode> getChildren() {
        return children;
    }

    public boolean isWord() {
        return isWord;
    }

    public void setWord(boolean word) {
        isWord = word;
    }
}

class Trie {
    private TrieNode root;

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

    public void insert(String word) {
        TrieNode node = root;
        for (char c : word.toCharArray()) {
            node.getChildren().computeIfAbsent(c, k -> new TrieNode());
            node = node.getChildren().get(c);
        }
        node.setWord(true);
    }

    public boolean search(String word) {
        TrieNode node = searchPrefix(word);
        return node != null && node.isWord();
    }

    public boolean startsWith(String prefix) {
        return searchPrefix(prefix) != null;
    }

    private TrieNode searchPrefix(String prefix) {
        TrieNode node = root;
        for (char c : prefix.toCharArray()) {
            if (!node.getChildren().containsKey(c)) {
                return null;
            }
            node = node.getChildren().get(c);
        }
        return node;
    }
}

public class Test {
    public static void main(String[] args) {
        Trie t = new Trie();
        t.insert("ab");
        t.insert("acjmn");
        t.insert("adg");
        t.insert("adk");
        System.out.println(t.search("acj"));
        System.out.println(t.search("acjmn"));
        System.out.println(t.startsWith("acj"));
    }
}

上述代码定义了两个类:TrieNode和Trie。TrieNode表示前缀树的节点,其中包含一个children映射用于存储子节点,以及一个isWord标记表示当前节点是否为单词结尾。
Trie类表示前缀树,其中包含一个根节点root,构造函数用于初始化根节点。

Trie类提供了三个方法:

insert(String word) 方法用于将一个单词插入到前缀树中。
search(String word) 方法用于判断一个单词是否存在于前缀树中。
startsWith(String prefix) 方法用于判断是否存在以给定前缀开头的单词。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目 Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。...
    程序员小2阅读 145评论 0 1
  • Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数...
    Abeants阅读 185评论 0 0
  • 引子 在刷题的过程中,经常会遇到这样一种典型问题: 给一组字符串List strs,找出其中前缀为String ...
    akak18183阅读 258评论 0 0
  • 最大 BST 子树(https://leetcode-cn.com/problems/largest-bst-su...
    我是小曼巴阅读 259评论 0 0
  • Trie 树的定义: Trie 树,即字典树,又称前缀树,是一种多叉树结构。典型的应用是用于统计和排序大量的字...
    habit_learning阅读 661评论 0 0