Check for Balanced Tree Java
- Get link
- X
- Other Apps
PROGRAM TO DETERMINE IF A BINARY TREE IS HEIGHT BALANCED
class Node { int data; Node left, right; Node(int d) { data = d; left = right = null; }} // A wrapper class used to modify height across// recursive calls.class Height { int height = 0;} class BinaryTree { Node root; /* Returns true if binary tree with root as root is height-balanced */ boolean isBalanced(Node root, Height height) { /* If tree is empty then return true */ if (root == null) { height.height = 0; return true; } /* Get heights of left and right sub trees */ Height lheight = new Height(), rheight = new Height(); boolean l = isBalanced(root.left, lheight); boolean r = isBalanced(root.right, rheight); int lh = lheight.height, rh = rheight.height; /* Height of current node is max of heights of left and right subtrees plus 1*/ height.height = (lh > rh ? lh : rh) + 1; /* If difference between heights of left and right subtrees is more than 2 then this node is not balanced so return 0 */ if (Math.abs(lh - rh) >= 2) return false; /* If this node is balanced and left and right subtrees are balanced then return true */ else return l && r; } public static void main(String args[]) { Height height = new Height(); /* Constructed binary tree is 1 / \ 2 3 / \ / 4 5 6 / 7 */ BinaryTree tree = new BinaryTree(); tree.root = new Node(1); tree.root.left = new Node(2); tree.root.right = new Node(3); tree.root.left.left = new Node(4); tree.root.left.right = new Node(5); tree.root.right.right = new Node(6); tree.root.left.left.left = new Node(7); if (tree.isBalanced(tree.root, height)) System.out.println("Tree is balanced"); else System.out.println("Tree is not balanced"); }}
OUTPUT:
Tree is balanced
- Get link
- X
- Other Apps
Comments
Post a Comment