#java #trie
#Ява #трие
Вопрос:
у меня есть этот код, и я хочу реализовать метод удаления «удалить(строки), может ли кто-нибудь помочь мне с этим? мне нужно, чтобы он принимал в качестве параметра только строку.
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; } }
Комментарии:
1. Привет! Не могли бы вы, пожалуйста, отредактировать свой вопрос и добавить класс TrieNode в свой вопрос. Кроме того, какова предполагаемая функциональность удаления ? Вы хотите, чтобы он удалил дочерний триенод и все его дочерние элементы, если найден первый символ строки (Сверху вниз), или вы хотите удалить триеноды методом снизу вверх ?
Ответ №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; }