class Solution {
public:
    bool IsBalanced_Solution(TreeNode* pRoot) {
        return getHeight(pRoot) == -1 ? false : true;
    }
    
  	// 返回以该节点为根节点的二叉树的高度,如果不是平衡二叉树了则返回-1
  	// 后序遍历
    int getHeight(TreeNode* node) {
        if (node == nullptr) return 0;
        int left_height = getHeight(node->left);  // 左子树
        if (left_height == -1) return -1;
        int right_height = getHeight(node->right); // 右子树
        if (right_height == -1) return -1;
        int res;
        if (abs(left_height - right_height) > 1) { // 中
            res = -1;
        } else {
            res = 1 + max(left_height, right_height); // 以当前节点为根节点的树的最大高度
        }
        return res;
    }
    
};