Ein Tri-Tree ist eine Art geordneter Baum, und es ist ein Algorithmus, bei dem Zeichen in jedem Knoten gespeichert werden und eine Suche durch Verfolgen der Knoten durchgeführt werden kann.
Erstellen Sie eine Klasse, die einen Knoten darstellt
public class Node {
private int id;
private String str;
private ArrayList<Node> child = new ArrayList<>();
public int getId() {
return this.id;
}
public String getStr() {
return this.str;
}
public ArrayList<Node> getChild(){
return this.child;
}
public void setId(int id) {
this.id = id;
}
public void setStr(String str) {
this.str = str;
}
public void setChild(Node node) {
this.child.add(node);
}
}
Die ID identifiziert den Knoten und muss nicht separat sein str ist das Zeichen, das im Knoten gespeichert werden soll Kind soll das Kind des Knotens speichern
Der Baum kann wie folgt gebaut werden
public class Main {
private static ArrayList<Node> nodeList = new ArrayList<>();
private static int id = 1;
public static void insert(Node parent, String word, int charIndex) {
String w = String.valueOf(word.charAt(charIndex));
//System.out.println(w);
if(charIndex == word.length()-1) { //Für das letzte Zeichen
for(Node n:parent.getChild()) { //Wenn der letzte Knoten ein vorhandener Knoten ist
if(n.getStr() != null&&n.getStr().equals(w)) {
return;
}
}
Node node = new Node();
node.setStr(w);
parent.setChild(node);
node.setChild(node);
node.setId(id);
id += 1;
nodeList.add(node);
return;
}
for(Node n:parent.getChild()) { //Wenn das Kind die aktuelle Station enthält
if(n.getStr() != null&&n.getStr().equals(w)) {
insert(n,word,charIndex+1);
return;
}
}
Node node = new Node();
node.setStr(w);
parent.setChild(node);
node.setId(id);
id += 1;
nodeList.add(node);
if(charIndex < word.length()-1) { //Rekursive Verarbeitung
insert(node, word, charIndex+1);
}
}
Es tut mir leid, wenn ich einen Fehler gemacht habe, weil es eine Neufassung des Artikels war, den ich geschrieben habe, als ich einen anderen Algorithmus durch Entwickeln eines kleinen Tri-Tree (_ _) erstellt habe.
Dieses Mal hatte ich die Möglichkeit, einen Tri-Tree zu verwenden, also habe ich versucht, ihn mit Java zu implementieren, aber es hat lange gedauert, ihn zu verstehen, da er rekursive Verarbeitung verwendet. Schließlich bin ich nicht gut in rekursiver Verarbeitung, deshalb möchte ich sie aktiv nutzen, um meine Schwäche zu beseitigen ...
Recommended Posts