看到题目想到的解法是对根节点的左右子树进行最大深度求解,然后比较最大深度的绝对值是否小于等于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);}
};