Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees ofevery node never differ by more than 1.
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isBalanced(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int h = 0;
return InternalIsBalanced(root, h);
}
private:
bool InternalIsBalanced(TreeNode *root, int& height) {
if (root == NULL) {
height = 0;
return true;
}
if (root->left == NULL && root->right == NULL) {
height = 1;
return true;
} else if (root->left == NULL) {
int rc = 0;
bool r_balance = InternalIsBalanced(root->right, rc);
height = rc + 1;
return rc < 2 && r_balance;
} else if (root->right == NULL) {
int lc = 0;
bool l_balance = InternalIsBalanced(root->left, lc);
height = lc + 1;
return lc < 2 && l_balance;
} else {
int lc = 0;
int rc = 0;
bool r_balance = InternalIsBalanced(root->right, rc);
bool l_balance = InternalIsBalanced(root->left, lc);
height = rc > lc ? rc + 1 : lc + 1;
int short_height = rc > lc ? rc - lc : lc -rc;
return r_balance && l_balance && short_height < 2;
}
}
};