题意:
        输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。
        平衡二叉树(Balanced Binary Tree),具有以下性质:
                它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

方法一:
递归

思路:
        记录每个节点作为根的子树高度。
        递归。
        当左右子树的高度差>1,则返回 false;
        否则返回 true。

        

class Solution {
public:
    bool flag=true;
    bool IsBalanced_Solution(TreeNode* pRoot) {
        dfs(pRoot);
        return flag;
        
    }
    int dfs(TreeNode* root){//记录每个节点作为根的子树高度
        if(root==nullptr)
            return 0;
        int t1=dfs(root->left);//左节点
        int t2=dfs(root->right);//右节点
        if(abs(t1-t2)>1){//高度差>1,则返回false
            flag=false;
        }
        return max(t1,t2)+1;
    }
};


时间复杂度:
空间复杂度:

方法二:
递归+剪枝

思路:
        参照方法一,但可以设置剪枝操作。
        当发现左右子树的高度差>1,则置flag=false。
        剪枝操作:
                        每次递归,都先判断flag是否false,
                        如果 flag == false ,则直接 return 。
class Solution {
public:
    bool flag=true;
    bool IsBalanced_Solution(TreeNode* pRoot) {
        dfs(pRoot);
        return flag;
        
    }
    int dfs(TreeNode* root){//记录每个节点作为根的子树高度
        if(flag==false)//剪枝
            return -1;
        if(root==nullptr)
            return 0;
        int t1=dfs(root->left);//左节点
        int t2=dfs(root->right);//右节点
        if(abs(t1-t2)>1){//高度差>1,则返回false
            flag=false;
            return -1;
        }
        return max(t1,t2)+1;
    }
};

时间复杂度:
空间复杂度: