题目描述
实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。
给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。
返回值表示该树的高度,如果为-1,表示该树不是二叉平衡树。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Balance {
public:
bool isBalance(TreeNode* root) {
// write code here
return (fun(root) == -1? false : true);
}
int fun(TreeNode *root)
{
if(root == nullptr)
return 0;
int left = fun(root ->left);
int right = fun(root ->right);
if(left == -1 || right == -1)
return -1;
if(left - right > 1 || left - right < -1)
return -1;
return 1 + (left > right? left : right);
}
};