平衡二叉树(AVL):
1).必须是二叉查找树;
2).必须满足每个结点的左右子树最大高度差绝对值不大于1
本题中的高度平衡二叉树只要求满足第二点即可
class Solution
{
public:
bool isBalanced(TreeNode* root)
{
if (!root) return 1;
//先判断本结点的左右子树最大高度差绝对值是否大于1
if (abs(depth(root->left) - depth(root->right)) > 1) return 0;
//再递归调用函数自身判断本结点左右子树是否是高度平衡二叉树
else if (isBalanced(root->left) == 0 || isBalanced(root->right) == 0) return 0;
else return 1;
}
//求二叉树最大深度
int depth(TreeNode* node)
{
if (node == NULL) return 0;
return max(depth(node->left), depth(node->right)) + 1;
}
};
思路:
- 先判断本结点的左右子树最大高度差绝对值是否大于1,大于1返回false
- 再递归调用函数自身判断本结点左右子树是否是高度平衡二叉树,有一个子树不是时返回false
- 当上面两步执行完后仍未返回false时,说明本结点及其左右子树满足高度平衡二叉树条件