题目要求
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
思路
这个题的思路和判断二叉树的最大深度类似,我们需要求出左子树和右子树中最大的那个,在那个基础上加一,两个子数的深度差的绝对值小于2。
图解
代码实现
int max(int x, int y)
{
return x > y ? x : y;
}
int maxDepth(struct TreeNode* root){
if (root == NULL)
{
return 0;
}
return max(maxDepth(root->left), maxDepth(root->right)) + 1;
}
bool isBalanced(struct TreeNode* root){
if (root == NULL)
{
return true;
}
int leftDepth = maxDepth(root->left);
int rightDepth = maxDepth(root->right);
return abs(leftDepth - rightDepth) < 2 && isBalanced(root->left) && isBalanced(root->right);
}