public class Solution {

    public boolean IsBalanced_Solution(TreeNode root) {

        if (root == null) {
            return true;
        }

        int leftHeight = treeDeepHeight(root.left);

        int rightHeight = treeDeepHeight(root.right);

        int heightMinus = Math.abs(leftHeight - rightHeight);

        if (heightMinus > 1) {
            return false;
        }

        return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
    }

    public int treeDeepHeight (TreeNode root) {

        if (root == null) {
            return 0;
        }

        return Math.max(treeDeepHeight(root.left), treeDeepHeight(root.right)) + 1;
    }
}