题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
方法1:
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if(!pRoot) return true;
return abs(maxDeepth(pRoot->left)-maxDeepth(pRoot->right))<=1 && IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right);
}
int maxDeepth(TreeNode* pRoot){
if(!pRoot)return 0;
return 1+max(maxDeepth(pRoot->left),maxDeepth(pRoot->right));
}
};
方法2:剪接,防止求深度的时候,重复遍历。
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
return maxDeepth(pRoot)!=-1;
}
int maxDeepth(TreeNode* pRoot){
if(!pRoot)return 0;
int left = maxDeepth(pRoot->left);
if(left==-1)return -1;
int right = maxDeepth(pRoot->right);
if(right==-1)return -1;
return abs(left-right)<=1?max(left,right)+1:-1;
}
};