算法题目: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.
大致意思:判断一颗二叉树是否为平衡二叉树,平衡二叉树满足:任何一个节点的左右子树的高相差不超过1。
具体思路:递归计算每个节点的高,并判断其是否为平衡二叉树。递归终至条件:树为空,高设置为0,并返回true(表示是平衡二叉树)。递归计算节点的左右子树的高,并返回左右子树是否为平衡二叉树,那么当前节点的高为左右子树高的最大值加1,且若左右子树都为平衡二叉树且它们高差值的绝对值不超过1,则当前节点是平衡二叉树。具体代码如下:
bool BalancedCore(TreeNode* root,int& Height)
{
if(root==NULL)
{
Height=0;
return true;
}
int leftHeight=0;
int rightHeight=0;
bool leftflag=true;
bool rightflag=true;
leftflag=BalancedCore(root->left,leftHeight);
rightflag=BalancedCore(root->right,rightHeight);
Height=max(leftHeight,rightHeight)+1;
if(leftflag&&rightflag&&abs(rightHeight-leftHeight)<=1)
return true;
else
return false;
}
bool isBalanced(TreeNode* root) {
int h=0;
return BalancedCore(root,h);
}