题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路: 平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。因此,计算出每个结点的左子树与右子树的深度即可判断。
平衡因子: 某结点的左子树与右子树的高度(深度)差即为该结点的平衡因子(BF,Balance Factor)。平衡二叉树上所有结点的平衡因子只可能是 -1,0 或 1。如果某一结点的平衡因子绝对值大于1则说明此树不是平衡二叉树。
代码
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if (pRoot == NULL) return true;
int left, right;
left = Depth(pRoot -> left);
right = Depth(pRoot -> right);
//判断
if (left == right || left + 1 == right || right + 1 == left)
return IsBalanced_Solution(pRoot -> left) && IsBalanced_Solution(pRoot -> right);
return false;
}
//计算深度
int Depth(TreeNode *p)
{
if (p == NULL)
return 0;
int i = 0;
int j = 0;
i = Depth(p -> left);
j = Depth(p -> right);
return i > j ? i + 1: j + 1;
}
};
- 可以回顾以下剑指offer的另一道题,该题为求深度,本题在该题的基础上解答。
- 剑指offer:二叉树的深度(c++)