diff --git a/data_structures/Trees/FindHeightOfTree.java b/data_structures/Trees/FindHeightOfTree.java new file mode 100644 index 00000000..675b1e8b --- /dev/null +++ b/data_structures/Trees/FindHeightOfTree.java @@ -0,0 +1,100 @@ +/** + * + * @author Varun Upadhyay (https://github.com/varunu28) + * + */ +import java.util.LinkedList; + +public class FindHeightOfTree { + + // Driver Program + public static void main(String[] args) { + Node tree = new Node(5); + tree.insert(3); + tree.insert(7); + tree.insert(1); + tree.insert(-1); + tree.insert(29); + tree.insert(93); + tree.insert(6); + tree.insert(0); + tree.insert(-5); + tree.insert(-6); + tree.insert(-8); + tree.insert(-1); + + // A level order representation of the tree + tree.printLevelOrder(); + System.out.println(); + + System.out.println("Height of the tree is: " + tree.findHeight()); + } +} + +/** + * The Node class which initializes a Node of a tree + * printLevelOrder: ROOT -> ROOT's CHILDREN -> ROOT's CHILDREN's CHILDREN -> etc + * findHeight: Returns the height of the tree i.e. the number of links between root and farthest leaf + */ +class Node { + Node left, right; + int data; + + public Node(int data) { + this.data = data; + } + + public void insert (int value) { + if (value < data) { + if (left == null) { + left = new Node(value); + } + else { + left.insert(value); + } + } + else { + if (right == null) { + right = new Node(value); + } + else { + right.insert(value); + } + } + } + + public void printLevelOrder() { + LinkedList queue = new LinkedList<>(); + queue.add(this); + while(!queue.isEmpty()) { + Node n = queue.poll(); + System.out.print(n.data + " "); + if (n.left != null) { + queue.add(n.left); + } + if (n.right != null) { + queue.add(n.right); + } + } + } + + public int findHeight() { + return findHeight(this); + } + + private int findHeight(Node root) { + if (root.left == null && root.right == null) { + return 0; + } + else if (root.left != null && root.right != null) { + return 1 + Math.max(findHeight(root.left), findHeight(root.right)); + } + else if (root.left == null && root.right != null) { + return 1 + findHeight(root.right); + } + else { + return 1 + findHeight(root.left); + } + } +} +