题目:
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路:
当左右子树分别为平衡二叉树,且左右子树的深度差小于等于1时,该二叉树平衡
因此可以使用递归思想去判断子树的平衡性,再判断左右子树的深度差是否满足平衡条件
代码实现:
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
int depth = 0;
return IsBalance(pRoot, &depth);
}
bool IsBalance(TreeNode* pRoot, int* depth)
{
if(pRoot == nullptr)
{
*depth = 0;
return true;
}
int left, right;
/*---当左右子树分别为平衡二叉树,且左右子树的深度差小于等于1时,该二叉树平衡---*/
if(IsBalance(pRoot->left, &left) && IsBalance(pRoot->right, &right))
{
int dif = left - right;
if(dif <= 1 && dif >= -1)
{
*depth = left > right ? (left + 1) : (right + 1);
return true;
}
}
return false;
}
};