как реализовать метод удаления из trie?

#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; }