Binary Trees
Binary Trees
import java.util.Stack;
/**
* Generic Binary Search Tree class. Implements Comparable Interface.
* @author Bharat
*
* @param <T>
*/
public class BinarySearchTree<T extends Comparable<T>> {
private Node<T> root;
public BinarySearchTree() {
this.root = null;
}
/***************** Public Interfaces *****************/
/**
* Recursive insert
* @param data
*/
public void insert(T data) {
root = insert(root, data);
}
public void printPreOrder() {
printPreOrder(root);
}
public void printPostOrder() {
printPostOrder(root);
}
public void printInOrder() {
printInOrder(root);
}
public void printPreOrderIterative() {
printPreOrderIterative(root);
}
public void printInOrderIterative() {
printInOrderIterative(root);
}
public void printPostOrderIterative() {
printPostOrderIterative(root);
}
/***************** Private Implementations *****************/
private Node<T> insert(Node<T> node, T data) {
if (node == null) {
node = new Node<T>(data);
}
int compareResult = data.compareTo(node.getData());
if (compareResult < 0) {
// If data < node's data
Node<T> newNode = insert(node.getLeft(), data);
node.setLeft(newNode);
}
else if (compareResult > 0) {
// If data > node's data
Node<T> newNode = insert(node.getRight(), data);
node.setRight(newNode);
}
}
return node;
root.printValue();
printPreOrder(root.getLeft());
printPreOrder(root.getRight());
printPostOrder(root.getLeft());
printPostOrder(root.getRight());
root.printValue();
printInOrder(root.getLeft());
root.printValue();
printInOrder(root.getRight());
if (current.getLeft() != null)
stack.push(current.getLeft());
while (true) {
// Keep pushing left node till hitting a null leaf
if (current != null) {
stack.push(current);
current = current.getLeft();
}
// Pop, print and go to right node
else {
if (stack.isEmpty())
return;
current = stack.pop();
current.printValue();
current = current.getRight();
}
}
}
}
while (!stack2.isEmpty()) {
current = stack2.pop();
current.printValue();
}