给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
左子树的高度和右子树的高度相差不能大于1,所以只需要求出做左子树的深度和右子树的深度,再看看它们相差是不是大于1。
代码实现
**
e.
* struct TreeNode {//创建一个结构体
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int depth(struct TreeNode*root)//求深度的子函数
{
if(root==NULL)
{
return 0;
}
int left=depth(root->left)+1;//左边的节点加上头节点,就等同于左边的深度
int right=depth(root->right)+1;//同理,
return left>right?left:right;//再看其左子树和右子树的深度;
}
bool isBalanced(struct TreeNode* root)
{
if(root==NULL)
{
return true;//如果事空树,就是平衡二叉树
}
int left=depth(root->left);
int right=depth(root->right);
if(abs(left-right)>1)
{
return false;//如果大于1,说明它不是平衡二叉树
}
return isBalanced(root->left)&&isBalanced(root->right);//对二叉树进行递归
}