题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
思路:
递归思想,先计算左子树深度,再计算右子树深度,如果两子树深度相差大于1则返回-1,否则返回两者之间较大者+1
C++
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
return IsBalanced(pRoot) >= 0;
}
int IsBalanced(TreeNode* pRoot){
if(pRoot == nullptr)
return 0;
int left = IsBalanced(pRoot->left);
int right = IsBalanced(pRoot->right);
int delta = abs(left - right);
if(delta <= 1 && left >= 0 && right >= 0)
return max(left, right) +1;
else
return -1;
}
};