题目:
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1
输入:root = [3,9,20,null,null,15,7]
输出:true
解题思路:
1.计算每个节点的深度
2.每个节点的左右子树高度差绝对值不超过
3.在判断时,不能只判断根节点,需要判断每个节点的左右子树的高度差
源代码如下:
class Solution {
public:
//计算每个节点的深度
int depth(TreeNode* root)
{
if(root==nullptr) return 0;
return max(depth(root->left),depth(root->right))+1;
}
bool isBalanced(TreeNode* root) {
if(root==nullptr) return true;
//根节点的左右子树的深度差不能超过1
//同时,二叉树的每个节点都是如此,所以不能少了对除了根节点以外的其他节点的判断
//isBalanced(root->left)&&isBalanced(root->right)
return abs(depth(root->left)-depth(root->right))<=1 && isBalanced(root->left)&&isBalanced(root->right);
}
};