一、题目链接:
https://leetcode.cn/problems/balanced-binary-tree/submissions/536133365
二、思路
调用深度计算函数,得到每次当前的根结点的左右子树的深度。比较每次得到的左右子树深度之差
如果当前根节点的左右子树的深度差大于1,说明不是平衡二叉树。
每个结点都要综合其左右子树的情况
三、题解代码
//调用二叉树深度计算函数
int TreeDepth(struct TreeNode*root)
{
if(root==NULL)
return 0;
int LeftDepth=TreeDepth(root->left);
int RightDepth=TreeDepth(root->right);
return LeftDepth>RightDepth?LeftDepth+1:RightDepth+1;
}
bool isBalanced(struct TreeNode* root) {
if(root==NULL) //如果根结点为NULL,返回true
return true;
//调用深度计算函数,得到每次当前的根结点的左右子树的深度
int Left=TreeDepth(root->left);
int Right=TreeDepth(root->right);
int Big=Left,Small=Right;
if(Left<Right)
{
Big=Right;
Small=Left;
}
//比较每次得到的左右子树深度之差
//如果当前根节点的左右子树的深度差大于1,说明不是平衡二叉树
if(Big-Small>1)
return false;
//每个结点都要综合其左右子树的情况
return isBalanced(root->left)&& isBalanced(root->right);
}