Balanced tree check
Given a binary tree, test if the tree is balanced.
Solution
- A tree is balanced if difference between left subtree height and right subtree height is not more than 1.
 - Trick here is to combine height calculation while recursing and checking if the sub-tree is balanced.
 
Code
def balanced?(root)
    return true, -1 if root.nil?
    left_result, left_height = balanced?(root.left)
    return false, -1 if !left_result
    right_result, right_height = balanced?(root.right)
    return false, -1 if !right_result
    height = max(left_height, right_height) + 1
    if Math.abs(left_height - right_height) <= 1
        return true, height
    end
    return false, -1
end
Time complexity
O(n) since were doing a form of post order traversal