【问题标题】:how to implement a delete method from a trie?如何从 trie 中实现删除方法?
【发布时间】:2022-01-06 09:24:34
【问题描述】:

我有这个 trie 代码,我想实现一个删除方法“delete(String s),有人可以帮我吗? 我需要它只将字符串作为参数。

class Trie {
    private TrieNode root;

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

    public void insert(String s) {
        TrieNode curNode = root;
        char[] arr = s.toCharArray();
        for (char curChar : arr) {
            if (curNode.children.containsKey(curChar) == false) {
                curNode.children.put(curChar, new TrieNode());
            }
            curNode = curNode.children.get(curChar);
        }
        curNode.isWord = true;
    }

    public boolean contains(String s)  {
        TrieNode curNode = root;
        char[] arr = s.toCharArray();
        for (char curChar : arr) {
            if (curNode.children.containsKey(curChar) == false) {
                return false;
            }
            curNode = curNode.children.get(curChar);
        }
        return curNode.isWord;
    }

    
    public boolean isPrefix(String p) {
        TrieNode curNode = root;
        char[] arr = p.toCharArray();
        for (char curChar : arr) {
            if (curNode.children.containsKey(curChar) == false) {
                return false;
            }
            curNode = curNode.children.get(curChar);
        }
        return true;
    }
}

【问题讨论】:

  • 您好!您能否编辑您的问题并将 TrieNode 类添加到您的问题中。另外, delete 的预期功能是什么?如果找到字符串的第一个字符(自上而下),您是否希望它删除子 TrieNode 及其所有子节点,还是要从自下而上的方法中删除 TrieNode?​​span>

标签: java trie


【解决方案1】:

你可以把curNode.isWord改成false表示删除。

public boolean delete(String s)  {
    TrieNode curNode = root;
    char[] arr = s.toCharArray();
    for (char curChar : arr) {
        if (curNode.children.containsKey(curChar) == false) {
            return false;
        }
        curNode = curNode.children.get(curChar);
    }
    curNode.isWord = false;
    return true;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多