Wie funktioniert die Funktion next() in der Tries-Datenstruktur?Java

Java-Forum
Guest
 Wie funktioniert die Funktion next() in der Tries-Datenstruktur?

Post by Guest »

Ich habe mir die Tries-Datenstruktur angesehen (ich habe sie gefunden, als ich ein Leetcode-Problem gelöst habe).
Soweit ich es verstanden habe, speichern wir in einem Trie die Zeichen eines Wortes auf ähnliche Weise zu einem Baum, und wir gehen von der Wurzel zum Ende eines Wortes.
Um einen Knoten einzufügen, wird diese Funktion verwendet:

Code: Select all

public void put(char c, Node node) {
links[c - 'a'] = node;
}

Um nun von einem Knoten zum anderen zu gelangen, also von einem Zeichen zum anderen, verwenden wir die nächste Funktion

Code: Select all

public Node next(char c) {
return links[c - 'a'];
}
Jetzt ist meine Frage: Sind die „Links“, die wir in next() zurückgeben, nicht dieselben, in die wir gerade eingefügt haben? Wie ist es zum nächsten Knoten geworden?
Das heißt, in der Funktion put() verwenden wir die Parameter „char c“ und „Node node“ und fügen einen Knoten in das Array der Knoten (Links) ein ), die wir am Anfang gemacht haben. Wenn wir nun die Funktion next() aufrufen, geben wir dann nicht nur den Knoten des Zeichens zurück, das wir eingefügt haben?
Die vollständige Implementierung ist unten angegeben:
(Alle Der angegebene Code ist in Java)

Code: Select all

class Node {

private Node[] links = new Node[26];

// Check if the character is present in the current node
public boolean contains(char c) {
return links[c - 'a'] != null;
}

// Insert a new node for the character
public void put(char c, Node node) {
links[c - 'a'] = node;
}

// Get the next node for the character
public Node next(char c) {
return links[c - 'a'];
}
}

class Trie {

private Node root;

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

// Insert a word into the Trie
public void insert(String word) {
Node node = root;
for (char c : word.toCharArray()) {
if (!node.contains(c)) {
node.put(c, new Node());
}
node = node.next(c);
}
}

// Check if the Trie contains a given prefix
public boolean startsWith(String prefix) {
Node node = root;
for (char c : prefix.toCharArray()) {
if (!node.contains(c)) {
return false;
}
node = node.next(c);
}
return true;
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post