import java.util.Random;
class Node
{
Node left;
Node right;
int data;
public Node(int data)
{
this.data = data;
}
}
class BinarySearchTree
{
Node root;
char prefixChar;
public BinarySearchTree(char preChar)
{
prefixChar = preChar;
}
public void addNode(int val)
{
Node nNode = new Node(val);
if(root == null) root = nNode;
else
{
Node tNode = root;
while(tNode != null)
{
if(tNode.data > val)
{
if(tNode.left == null)
{
tNode.left = nNode;
break;
}
tNode = tNode.left;
}
else
{
if(tNode.right == null)
{
tNode.right = nNode;
break;
}
tNode = tNode.right;
}
}
}
}
public Node search(int val)
{
Node tNode = root;
while(tNode != null)
{
if(val == tNode.data) return tNode;
else
{
tNode = (val < tNode.data) ? tNode.left: tNode.right;
}
}
return null;
}
void printTree
(Node node,
String prefix
) {
if(node == null) return;
System.
out.
println(prefix
+ "+ " + node.
data); printTree(node.left, prefix + prefixChar);
printTree(node.right, prefix + prefixChar);
}
}
class Main {
public static void main
(String[] args
) {
final int COUNT = 10;
final int MAX = 100;
BinarySearchTree bst = new BinarySearchTree(' ');
for(int i=0; i<COUNT; i++)
{
int num = random.nextInt(MAX);
bst.addNode(num);
System.
out.
println("Added : " + num
); }
bst.printTree(bst.root, "");
}
}
aW1wb3J0IGphdmEudXRpbC5SYW5kb207CgpjbGFzcyBOb2RlIAp7CglOb2RlIGxlZnQ7CglOb2RlIHJpZ2h0OwoJCglpbnQgZGF0YTsKCQoJcHVibGljIE5vZGUoaW50IGRhdGEpCgl7CgkJdGhpcy5kYXRhID0gZGF0YTsKCX0KfQoKY2xhc3MgQmluYXJ5U2VhcmNoVHJlZSAKewoJTm9kZSByb290OwoJY2hhciBwcmVmaXhDaGFyOwoJcHVibGljIEJpbmFyeVNlYXJjaFRyZWUoY2hhciBwcmVDaGFyKSAKCXsKCQlwcmVmaXhDaGFyID0gcHJlQ2hhcjsKCX0KCQoJcHVibGljIHZvaWQgYWRkTm9kZShpbnQgdmFsKQoJewoJCU5vZGUgbk5vZGUgPSBuZXcgTm9kZSh2YWwpOwoJCQoJCWlmKHJvb3QgPT0gbnVsbCkgcm9vdCA9IG5Ob2RlOwoJCWVsc2UKCQl7CgkJCU5vZGUgdE5vZGUgPSByb290OwoJCQl3aGlsZSh0Tm9kZSAhPSBudWxsKQoJCQl7CgkJCQlpZih0Tm9kZS5kYXRhID4gdmFsKQoJCQkJewoJCQkJCWlmKHROb2RlLmxlZnQgPT0gbnVsbCkgCgkJCQkJewoJCQkJCQl0Tm9kZS5sZWZ0ID0gbk5vZGU7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQl0Tm9kZSA9IHROb2RlLmxlZnQ7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJaWYodE5vZGUucmlnaHQgPT0gbnVsbCkgCgkJCQkJewoJCQkJCQl0Tm9kZS5yaWdodCA9IG5Ob2RlOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJdE5vZGUgPSB0Tm9kZS5yaWdodDsKCQkJCX0KCQkJfQoJCX0KCX0KCQoJcHVibGljIE5vZGUgc2VhcmNoKGludCB2YWwpCgl7CgkJTm9kZSB0Tm9kZSA9IHJvb3Q7CgkJd2hpbGUodE5vZGUgIT0gbnVsbCkKCQl7CgkJCWlmKHZhbCA9PSB0Tm9kZS5kYXRhKSByZXR1cm4gdE5vZGU7CiAgICAgICAgCWVsc2UKICAgICAgICAJewogICAgICAgIAkJdE5vZGUgPSAodmFsIDwgdE5vZGUuZGF0YSkgPyB0Tm9kZS5sZWZ0OiB0Tm9kZS5yaWdodDsKICAgICAgICAJfQoJCX0KCQlyZXR1cm4gbnVsbDsKCX0KCQoJdm9pZCBwcmludFRyZWUoTm9kZSBub2RlLCBTdHJpbmcgcHJlZml4KQoJewoJCWlmKG5vZGUgPT0gbnVsbCkgcmV0dXJuOwoJCgkJU3lzdGVtLm91dC5wcmludGxuKHByZWZpeCArICIrICIgKyBub2RlLmRhdGEpOwoJCXByaW50VHJlZShub2RlLmxlZnQsIHByZWZpeCArIHByZWZpeENoYXIpOwoJCXByaW50VHJlZShub2RlLnJpZ2h0LCBwcmVmaXggKyBwcmVmaXhDaGFyKTsKCX0KfQoKY2xhc3MgTWFpbiB7CgoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgCgl7CgkJZmluYWwgaW50IENPVU5UID0gMTA7CgkJZmluYWwgaW50IE1BWCA9IDEwMDsKCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbShNQVgqTUFYKTsKCQlCaW5hcnlTZWFyY2hUcmVlIGJzdCA9IG5ldyBCaW5hcnlTZWFyY2hUcmVlKCcgJyk7CgkJCgkJZm9yKGludCBpPTA7IGk8Q09VTlQ7IGkrKykKCQl7CgkJCWludCBudW0gPSByYW5kb20ubmV4dEludChNQVgpOwoJCQlic3QuYWRkTm9kZShudW0pOwoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFkZGVkIDogIiArIG51bSk7CgkJfQoJCQoJCWJzdC5wcmludFRyZWUoYnN0LnJvb3QsICIiKTsKCgl9Cgp9