一、题目
二、思路
递归退出条件:
- 当root==nullptr时,返回0;
- 当左子树-右子树绝对值大于1,返回-1;
- 当左子树==-1,右子树==-1,返回-1;
- 其余情况,返回当前左右子树中最大高度
最后返回情况,当为-1时,返回false,其余情况返回true
三、代码
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if(pRoot==nullptr)
{
return true;
}
return balance(pRoot)==-1?false:true;
}
int balance(TreeNode* pRoot)
{
if(pRoot==nullptr)
{
return 0;
}
int x=balance(pRoot->left);
int y=balance(pRoot->right);
if(abs(x-y)>1)
{
return -1;
}
if(x==-1 || y==-1)
{
return -1;
}
return 1+max(x,y);
}
};