题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路:
首先说明平衡二叉树的概念:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
剑指offer第三十八题是计算二叉树的深度,那么这里我们可以计算左子树和右子树的深度,再比较它们的差值,即可判断是否是平衡二叉树。
代码:
class Solution {
public:
int maxdepth(TreeNode* p)
{
while(p!=NULL)
{
return max((maxdepth(p->left) + 1),(maxdepth(p->right) + 1));
}
return 0;
}
bool IsBalanced_Solution(TreeNode* pRoot) {
if (pRoot == NULL)
return true;
return IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right) &&
abs(maxdepth(pRoot->left) - maxdepth(pRoot->right)) <= 1;//平衡二叉树的左子树
//和右子树都是平衡二叉树,所以再比较
//它们深度的同时,也要对它们单独判断
是否是平衡二叉树。
}
};