This is an implementation of a binary tree in Java.
Binary Tree
The following java class is the representation of a Binary Tree, which includes common methods such as insert()
, maximum()
and depth()
.
public class BinaryTree { // Define the root node. private BinaryNode _root; /** * Insert into the tree. * @param value */ public void insert(int value){ // If we don't have a root node, make one. if(_root == null){ // Make the root node. _root = new BinaryNode(value); } else { // Set the current node. BinaryNode current = _root; // Find the proper spot. while(current != null){ // Compare values. if(value < current.getValue()){ // Insert on the left. if(current.getLeft() == null){ current.setLeft(new BinaryNode(value)); return; } else { current = current.getLeft(); // Go to next left. } } else { // Insert on the right. if(current.getRight() == null){ current.setRight(new BinaryNode(value)); return; } else { current = current.getRight(); // Go to next right. } } } } } /** * Get the minimum value in the tree. * @return */ public int minimum(){ // Make sure we have at least one node. if(_root != null){ // Set the current node. BinaryNode current = _root; // Iterate until we hit the last left node. while(current.getLeft() != null){ current = current.getLeft(); } // Return the value of the last left node. return current.getValue(); } else { return 0; } } /** * Get the maximum value in the tree. * @return */ public int maximum(){ // Make sure we have at least one node. if(_root != null){ // Set the current node. BinaryNode current = _root; // Iterate until we hit the last right node. while(current.getRight() != null){ current = current.getRight(); } // Return the value of the last right node. return current.getValue(); } else { return 0; } } /** * Print the binary tree in ascending order of value. * @param n */ public void print(BinaryNode n){ if(n == null){ return; } else { print(n.getLeft()); System.out.println(n.getValue()); print(n.getRight()); } } public void print(){ print(_root); } /** * Return the number of nodes in the tree. * @return */ public int size(BinaryNode n){ // If the node is null, return 0. if(n == null){ return 0; } else { // We have at least one element. Get the size of it's children. return 1 + size(n.getLeft()) + size(n.getRight()); } } public int size(){ return size(_root); } /** * Return the (max) depth of the tree. * @return */ public int depth(BinaryNode n){ // Base case. if(n == null){ return 0; } else { // Get the depth of the left side. int leftSideDepth = depth(n.getLeft()); // Get the depth of the right size. int rightSideDepth = depth(n.getRight()); // Return the maximum depth of the two. return 1 + Math.max(leftSideDepth, rightSideDepth); } } public int depth(){ return depth(_root); } }
Binary Node
This class represents the nodes used in the binary tree. It has simple getValue()
and setValue()
methods.
public class BinaryNode { // References to left and right nodes. private BinaryNode _left; private BinaryNode _right; // The value of the node. private int _value; // Constructors. public BinaryNode(int value){ _value = value; } public BinaryNode(int value, BinaryNode nL, BinaryNode nR){ _value = value; _left = nL; _right = nR; } // Getter & setter for the value. public int getValue(){ return _value; } public void setValue(int value){ _value = value; } // Getters & setters for left & right nodes. public BinaryNode getLeft(){ return _left; } public BinaryNode getRight(){ return _right; } public void setLeft(BinaryNode n){ _left = n; } public void setRight(BinaryNode n){ _right = n; } }
Tester
This is the tester class for populating the binary tree and checking the validity of its methods.
public class Test { public static void main(String[] args){ BinaryTree tree = new BinaryTree(); tree.insert(26); tree.insert(11); tree.insert(31); tree.insert(6); tree.insert(17); tree.insert(44); tree.insert(2); tree.insert(39); tree.insert(20); System.out.println("Minimum in tree: " + tree.minimum()); System.out.println("Maximum in tree: " + tree.maximum()); System.out.println("Size of tree: " + tree.size()); System.out.println("Depth of tree: " + tree.depth()); tree.print(); } }