나는 을 가지고있다. 3 차 검색 나무 (Trie) 나는 그 안에 모든 단어를 인쇄하고 싶다.Trie에서 모든 단어를 어떻게 출력합니까?
아래에있는 현재 구현을 사용하여 어떻게이 문제를 해결할 수 있습니까? 트리에 새 단어를 추가하는 표준 put
방법이 있습니다. 순차적 탐색을 사용하여 단어를 인쇄하려했지만 함수를 정확히 완료하는 방법이 확실하지 않습니다. 각 노드는 하나의 문자를 저장하기 때문에 당신의 통과를 수행 할 때 루트에서 경로에 의해 정의 된 접두사를 나타내는 (당신이 효율적으로하려는 경우, 또는 모두 StringBuilder를)
class TST {
private Node root;
public void put(String key, int value) {
root = put(root, key, value, 0);
}
private Node put(Node node, String key, int value, int index) {
char c = key.charAt(index);
if(node == null){
node = new Node(c);
}
if(c < node.character){
node.left = put(node.left, key, value, index);
}else if(c > node.character){
node.right = put(node.right, key, value, index);
}else if(index < key.length()-1){
node.middle = put(node.middle, key, value, index+1);
}else{
node.value = value;
}
return node;
}
public Integer get(String key) {
Node node = get(root, key, 0);
if (node == null) {
return null;
}
return node.value;
}
public Node get(Node node, String key, int index) {
if(node == null) {
return null;
}
char c = key.charAt(index);
if (c < node.character) {
return get(node.left, key, index);
} else if (c > node.character) {
return get(node.right, key, index);
} else if(index < key.length() -1) {
return get(node.middle, key, index);
} else {
return node;
}
}
public void inorderTraversal(Node node) {
System.out.print(node.character + ":" + node.value + " ");
if(node.left != null) {
inorderTraversal(node.left);
}
if(node.middle != null) {
inorderTraversal(node.middle);
}
if(node.right != null) {
inorderTraversal(node.right);
}
}
public void traverse() {
inorderTraversal(root);
}
}
public class Main {
public static void main(String[] args) {
TST tst = new TST();
tst.put("This",3);
tst.put("There",4);
tst.put("Them",5);
tst.put("High",6);
System.out.println(tst.get("T"));
tst.traverse();
}
}
class Node {
public char character;
public Node left, right, middle;
public int value;
public Node(char character) {
this.character = character;
}
}
에 오신 것을 환영합니다. 나는 이미 작은 [둘러보기]를 가져 왔으면합니다. 문제는 정확히 무엇입니까? [ask] – AxelH
감사합니다. :) 저는 단지 노드에 인쇄 된 모든 단어를 인쇄 할 수 있기를 원합니다. 노드를 잘 인쇄 할 수는 있지만 단어는 인쇄 할 수 없습니다. 꽤 일반적인 면접 질문이 있어야하지만 그렇게하는 방법을 찾을 수 없습니다. –
좋아요. 노드와 메인 클래스를 여기에 추가했습니다. 트리에 단어를 입력 할 때마다이 단어의 각 문자에 노드와 값이 주어지기 때문에 모든 문자를 잘 인쇄 할 수는 있지만 원하는 것은 인쇄 할 수 있습니다. 나무에있는 단어. treis에 대한 시각화를 보여줍니다. https://www.cs.usfca.edu/~galles/visualization/TST.html –