问题描述:输入一颗二叉树,判断该二叉树是否为平衡二叉树
解题思路:
先从概念入手,什么是平衡二叉树:
1.它是一颗空树或者它的左右子树都是都是一颗平衡二叉树
2.它左右子树的高度差不超过1
了解了这个,这个问题就有解
先看1,这个问题好解决,用子问题的方法就能做到
再看2,就是求树的高度的问题,也可以用子问题的方式
int GetHeight(TreeNode *pRoot)
{
if(pRoot == NULL){
return 0;
}
int left = GetHeight(pRoot->left); //用子问题的方式求出左子树的高度
int right = GetHeight(pRoot->right); //用子问题的方式求出右子树的高度
return (left>right?left:right)+1;
}
bool IsBalanced_Solution(TreeNode* pRoot)
{
if(pRoot == NULL)
return true; //空树也是平衡二叉树
bool left = IsBalanced_Solution(pRoot->left); //用子问题的方式解决左子树
if(left == false)
return false;
bool right = IsBalanced_Solution(pRoot->right); //用子问题的方式解决右子树
if(right == false)
return false;
//走到这说明,左右子树都是平衡二叉树,满足了第一个条件
//下来,该去判断是否满足第二个条件
int leftH = GetHeight(pRoot->left); //调用求高度的函数去求出左子树的高度
int rightH = GetHeight(pRoot->right); //调用求高度的函数去求出右子树的高度
if(leftH-rightH>=-1&&leftH-rightH<=1){ //判断左右子数高度差是否不超过1
return true;
}else{
return false;
}
}