看到题目想到的解法是对根节点的左右子树进行最大深度求解,然后比较最大深度的绝对值是否小于等于1,如果是,那么是平衡二叉树,如果不是,那么不是平衡二叉树。代码如下:
class Solution {
public:
int maxDpeth(TreeNode* root){
if(root == nullptr){
return 0;
}
return max(maxDpeth(root->left), maxDpeth(root->right)) + 1;
}
bool isBalanced(TreeNode* root) {
if(root == nullptr){
return true;
}
int l_depth = maxDpeth(root->left);
int r_depth = maxDpeth(root->right);
return abs(l_depth- r_depth) <= 1;
}
};
但是这样求解忽视了平衡二叉树的条件,其树上每个节点的左右子树都需要满足深度差不超过1。因此在返回是,还要加上条件,根节点的左右子树也平衡。
class Solution {
public:
int maxDpeth(TreeNode* root){
if(root == nullptr){
return 0;
}
return max(maxDpeth(root->left), maxDpeth(root->right)) + 1;
}
bool isBalanced(TreeNode* root) {
if(root == nullptr){
return true;
}
int l_depth = maxDpeth(root->left);
int r_depth = maxDpeth(root->right);
return (abs(l_depth- r_depth) <= 1) && isBalanced(root->left) && isBalanced(root->right);
}
};