题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

解法

    //解法:后序遍历+减枝
    // 时间O(N) 空间O(N)
    bool IsBalanced_Solution(TreeNode* pRoot) {
        if (pRoot == nullptr) return true;
        return RecIsBalanced(pRoot) != -1;
    }
    //递归看root及其子树是否为平衡二叉树。若是,返回root树高;若任意子树不是,则返回-1(剪枝).
    int RecIsBalanced(TreeNode* pRoot) {
        if (pRoot == nullptr) return 0;
        int left = RecIsBalanced(pRoot->left);
        if (left == -1) return -1;
        int right = RecIsBalanced(pRoot->right);
        if (right == -1) return -1;
        if (abs(left - right) > 1) return -1;
        else return max(left, right) + 1;
    }