力扣:110 是否为AVL树

检查是否为平衡二叉树,其中一个答案错误反思

class Solution {
public:
    bool isBalanced(TreeNode* root)
    {
        if(root==nullptr)return true;
       return abs(height(root->left)-height(root->right))<1&&isBalanced(root->left)&&isBalanced(root->right)?true:false;
    }
    int height(TreeNode*root)
    {
       if(root==nullptr)return 0;
       if(abs(height(root->left)-height(root->right))>1)return -1;
       return max(height(root->left),height(root->right)+1);
    }

这里的思路原本是想通过height函数计算子树的高度。
在函数体内,如果某一层的左右子树高度差大于1,说明这不是AVL树,返回错误。
通过这样的方式来防止在 某一层为非AVL树,而根节点的左右子树高度差小于1是认为这时一个AVL树。
然而实际上这个操作是多余的。
因为在isBalance函数中的返回值中有:&&isBalance(root->left)&&isBalance(root->right).这一句递归的判断了每一层是否为AVL树。所以不需要在height函数中判断。

你可能感兴趣的:(leetcode,算法)