平衡二叉树要求对于二叉树的每一个节点,其左右子树的高度差不大于1。
故解题思路是先递归地求出二叉树的高度,再进行相减,若相减结果绝对值大于1,说明不是平衡二叉树,返回false,否则继续看其左右子树是否为平衡二叉树。
只有其所有子树都为平衡二叉树,该树才为平衡二叉树。
//求二叉树的高度
public int TreeHigh(TreeNode pRoot)
{
if(pRoot==null)//若二叉树为空,返回0
{
return 0;
}
int leftHigh=TreeHigh(pRoot.left);//若二叉树的高度不为空,求出左右子树的高度
int rightHigh=TreeHigh(pRoot.right);
if(leftHigh>=rightHigh)
{
return leftHigh+1;//当前二叉树的高度为左右子树最高的那个+1
}
return rightHigh+1;
}
public bool IsBalanced_Solution(TreeNode pRoot)
{
if(pRoot==null)//如果当前树为空,理所当然是平衡二叉树
{
return true;
}
int leftHigh=TreeHigh(pRoot.left);//不为空,求出左右子树的高度,求高度差
int rightHigh=TreeHigh(pRoot.right);
int gap=leftHigh-rightHigh;
if(gap>1 || gap<-1)//若高度差的绝对值大于1,就不是平衡二叉树,返回false
{
return false;
}
return IsBalanced_Solution(pRoot.left)&&IsBalanced_Solution(pRoot.right);//否则继续递归地求解,看其左右子树是否为平衡二叉树
}
参考链接:https://blog.csdn.net/hansionz/article/details/82745625(内附后序遍历判断是否为平衡二叉树)