题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路:判断平衡的条件就是左右子树高度差不超过1,如果从根节点出发判断,就会有很多重复判断,太浪费资源,所以我们可以从叶子节点开始判断,从叶子节点我们就可以用后序遍历来实现。
树高度的求法可以看我这篇博客:https://blog.csdn.net/weixin_42513339/article/details/81274663
代码如下:(这里我加了个标志位,这里的bool变量也充当标志位,可以中断递归。)
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
bool my = true;
postTraverse(pRoot,my);
return my;
}
//后序遍历
void postTraverse(TreeNode* pRoot,bool & my)
{
if(pRoot && my)
{
postTraverse(pRoot->left,my);
postTraverse(pRoot->right,my);
if(abs(treeHight(pRoot->left)-treeHight(pRoot->right))>1)
my = false;
}
}
int treeHight(TreeNode * pRoot)
{
int lh,rh,max;
if(pRoot)
{
lh = treeHight(pRoot->left);
rh = treeHight(pRoot->right);
max = (lh>rh)?lh:rh;
return max+1;
}
else
return 0;
}
};