import java.util.*;
import java.lang.*;
import java.io.*;
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;
}
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,
String word
) { if (node.value != 0) {
System.
out.
println(word
+ node.
character + ": " + node.
value); }
if(node.left != null) {
inorderTraversal(node.left, word);
}
if (node.middle != null) {
inorderTraversal(node.middle, word + node.character);
}
if(node.right != null) {
inorderTraversal(node.right, word);
}
}
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);
tst.put("The",7);
tst.traverse();
}
}
class Node {
public char character;
public Node left, right, middle;
public int value;
public Node(char character) {
this.character = character;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBUU1QgewoKcHJpdmF0ZSBOb2RlIHJvb3Q7CgpwdWJsaWMgdm9pZCBwdXQoU3RyaW5nIGtleSwgaW50IHZhbHVlKSB7CiAgICByb290ID0gcHV0KHJvb3QsIGtleSwgdmFsdWUsIDApOwp9CgoKcHJpdmF0ZSBOb2RlIHB1dChOb2RlIG5vZGUsIFN0cmluZyBrZXksIGludCB2YWx1ZSwgaW50IGluZGV4KSB7CgogICAgY2hhciBjID0ga2V5LmNoYXJBdChpbmRleCk7CgogICAgaWYoIG5vZGUgPT0gbnVsbCApewogICAgICAgIG5vZGUgPSBuZXcgTm9kZShjKTsKICAgIH0KCiAgICBpZiggYyA8IG5vZGUuY2hhcmFjdGVyICl7CiAgICAgICAgbm9kZS5sZWZ0ID0gcHV0KG5vZGUubGVmdCxrZXksdmFsdWUsaW5kZXgpOwogICAgfWVsc2UgaWYoIGMgPiBub2RlLmNoYXJhY3RlciApewogICAgICAgIG5vZGUucmlnaHQgPSBwdXQobm9kZS5yaWdodCxrZXksdmFsdWUsaW5kZXgpOwogICAgfWVsc2UgaWYoIGluZGV4IDwga2V5Lmxlbmd0aCgpLTEgKXsKICAgICAgICBub2RlLm1pZGRsZSA9IHB1dChub2RlLm1pZGRsZSxrZXksdmFsdWUsaW5kZXgrMSk7CiAgICB9ZWxzZXsKICAgICAgICBub2RlLnZhbHVlID0gdmFsdWU7CiAgICB9CgogICAgcmV0dXJuIG5vZGU7Cn0KCnB1YmxpYyBJbnRlZ2VyIGdldChTdHJpbmcga2V5KSB7CiAgICBOb2RlIG5vZGUgPSBnZXQocm9vdCwga2V5LCAwKTsKCiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcmV0dXJuIG5vZGUudmFsdWU7Cgp9CgpwdWJsaWMgTm9kZSBnZXQoTm9kZSBub2RlLCBTdHJpbmcga2V5LCBpbnQgaW5kZXgpIHsKICAgIGlmKG5vZGUgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGNoYXIgYyA9IGtleS5jaGFyQXQoaW5kZXgpOwoKICAgIGlmIChjIDwgbm9kZS5jaGFyYWN0ZXIpIHsKICAgICAgICByZXR1cm4gZ2V0KG5vZGUubGVmdCwga2V5LCBpbmRleCk7CiAgICB9IGVsc2UgaWYgKGMgPiBub2RlLmNoYXJhY3RlcikgewogICAgICAgIHJldHVybiBnZXQobm9kZS5yaWdodCwga2V5LCBpbmRleCk7CiAgICB9IGVsc2UgaWYoaW5kZXggPCBrZXkubGVuZ3RoKCkgLTEpIHsKICAgICAgICByZXR1cm4gZ2V0KG5vZGUubWlkZGxlLCBrZXksIGluZGV4KTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5vZGU7CiAgICB9Cgp9CgpwdWJsaWMgdm9pZCBpbm9yZGVyVHJhdmVyc2FsKE5vZGUgbm9kZSwgU3RyaW5nIHdvcmQpIHsKICAgIGlmIChub2RlLnZhbHVlICE9IDApIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4od29yZCArIG5vZGUuY2hhcmFjdGVyICsgIjogIiArIG5vZGUudmFsdWUpOwogICAgfQoKICAgIGlmKG5vZGUubGVmdCAhPSBudWxsKSB7CiAgICAgICAgaW5vcmRlclRyYXZlcnNhbChub2RlLmxlZnQsIHdvcmQpOwogICAgfQogICAgCiAgICBpZiAobm9kZS5taWRkbGUgIT0gbnVsbCkgewogICAgICAgIGlub3JkZXJUcmF2ZXJzYWwobm9kZS5taWRkbGUsIHdvcmQgKyBub2RlLmNoYXJhY3Rlcik7CiAgICB9CgogICAgaWYobm9kZS5yaWdodCAhPSBudWxsKSB7CiAgICAgICAgaW5vcmRlclRyYXZlcnNhbChub2RlLnJpZ2h0LCB3b3JkKTsKICAgIH0KfQoKcHVibGljIHZvaWQgdHJhdmVyc2UoKSB7CiAgICBpbm9yZGVyVHJhdmVyc2FsKHJvb3QsICIiKTsKfQoKfQoKcHVibGljIGNsYXNzIE1haW4gewoKcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgVFNUIHRzdCA9IG5ldyBUU1QoKTsKICAgIHRzdC5wdXQoIlRoaXMiLDMpOwogICAgdHN0LnB1dCgiVGhlcmUiLDQpOwogICAgdHN0LnB1dCgiVGhlbSIsNSk7CiAgICB0c3QucHV0KCJIaWdoIiw2KTsKICAgIHRzdC5wdXQoIlRoZSIsNyk7CiAgICB0c3QudHJhdmVyc2UoKTsKCn0KCn0KCmNsYXNzIE5vZGUgewoKcHVibGljIGNoYXIgY2hhcmFjdGVyOwpwdWJsaWMgTm9kZSBsZWZ0LCByaWdodCwgbWlkZGxlOwpwdWJsaWMgaW50IHZhbHVlOwoKcHVibGljIE5vZGUoY2hhciBjaGFyYWN0ZXIpIHsKICAgIHRoaXMuY2hhcmFjdGVyID0gY2hhcmFjdGVyOwp9Cn0=