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 of every node never differ by more than.
这道题不难,自己想清楚逻辑就行了,即一个二叉树是平衡树必须满足:1)左右子树都是平衡树,2)左子树和右子树的高度相差小于1。下面是代码: bool isBalanced(TreeNode *root) {
int leftH, rightH;
return isBalancedUtil(root, leftH, rightH);
}
bool isBalancedUtil(TreeNode* root, int& leftH, int& rightH)
{// utility function
if(root == NULL)
{
leftH = 0;
rightH = 0;
return true;
}
int leftH1, rightH1, leftH2, rightH2;
if(! isBalancedUtil(root->left, leftH1, rightH1) )
return false;
if(! isBalancedUtil(root->right, leftH2, rightH2) )
return false;
leftH = max(leftH1, rightH1) + 1;
rightH = max(leftH2, rightH2) + 1;
if(abs(leftH-rightH)>1)
return false;
else
return true;
}