rendered paste bodypublic class BinaryTree {
private Node root;
public class Node {
Node right;
Node left;
Comparable key;
public Node(Comparable key) {
right = null;
left = null;
this.key = key;
}
}
public BinaryTree() {
}
public boolean search(Comparable key) {
return search(key, root);
}
private boolean search(Comparable key, Node currentNode) {
if(currentNode != null) {
if(key.compareTo(currentNode.key) == 0) {
return true;
} else if(currentNode.left != null && key.compareTo(currentNode.key) < 0) {
return search(key, currentNode.left);
} else if(currentNode.right != null && key.compareTo(currentNode.key) > 0) {
return search(key, currentNode.right);
}
}
return false;
}
public void insert(Comparable key) {
insert(key, root);
}
private void insert(Comparable key, Node currentNode) {
if(currentNode != null) {
if(key.compareTo(currentNode.key) < 0) {
if(currentNode.left != null) {
insert(key, currentNode.left);
} else {
currentNode.left = new Node(key);
}
} else if(key.compareTo(currentNode.key) > 0) {
if(currentNode.right != null) {
insert(key, currentNode.right);
} else {
currentNode.right = new Node(key);
}
}
} else {
currentNode = new Node(key);
}
}
public int getElementCount() {
return getElementCount(root);
}
private int getElementCount(Node currentNode) {
if (currentNode == null) {
return 0;
} else {
return 1 + getElementCount(currentNode.left) + getElementCount(currentNode.right);
}
}
public int getTreeHeight() {
return 1+max(getTreeHeight(root.right),getTreeHeight(root.left));
}
private int getTreeHeight(Node currentNode) {
if(currentNode == null) {
return 0;
} else {
return 1+max(getTreeHeight(currentNode.left),getTreeHeight(currentNode.right));
}
}
private int max(int a, int b) {
if(a>b) {
return a;
} else if(b>a) {
return b;
}
return a;
}
public int getLeafCount() {
return getLeafCount(root);
}
private int getLeafCount(Node currentNode) {
if(currentNode == null) {
return 0;
} else if(currentNode.left == null && currentNode.right == null) {
return 1;
}
return getLeafCount(currentNode.left)+getLeafCount(currentNode.right);
}
}