题目概述:
思路:毋庸置疑,基本大部分关于二叉树的题目必定用到递归思想。这个题目也不例外。
这里我们利用后序遍历的思想,先遍历左子树,然后遍历右子树,最后判断根。每一次遍历时,我们都要去求这个根节点对应左右子树的深度,然后做比较,绝对值小于2则此节点满足,依次遍历,直到所有的节点都满足才是平衡树。
这个代码我们必须先写一个求二叉树深度的代码,很简单这里就不赘述了。
代码如下:
int maxDepth(struct TreeNode* root)
{
if(root==NULL)
{
return 0;
}
int leftdepth=maxDepth(root->left);
int rightdepth=maxDepth(root->right);
return leftdepth>rightdepth?leftdepth+1:rightdepth+1;
}
bool isBalanced(struct TreeNode* root)
{
if(root==NULL)
{
return true;
}
return abs(maxDepth(root->left)-maxDepth(root->right))<2&&
isBalanced(root->left)&&isBalanced(root->right); //该表达式表示每一个节点必须返回true最后才返回true
}