题目描述:(来源于力扣)
实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。
解题思路
1)递归求解每个节点的高度,关键在于父节点和子节点的高度值之间的关系;
2)计算平衡因子;
3)计算平衡性,使用递归求解每一个节点的平衡因子;
如果缺少最后的递归左右子树,就会导致只计算了根节点的平衡因子,其他节点的平衡因子都没有计算。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
//计算高度值
int getHeight(TreeNode * node){
if(node== nullptr)
return 0;
return 1+std::max(getHeight(node->left),getHeight(node->right));
}
//计算平衡因子
int getBalanceFactor(TreeNode* node){
if(node==nullptr)
return 0;
return getHeight(node->left)-getHeight(node->right);
}
bool isBalanced(TreeNode* root) {
if(root== nullptr)
return true;
int balanceFactor=getBalanceFactor(root);
if(std::abs(balanceFactor)>1)
return false;
//递归调用,计算左右子树的平衡因子
return isBalanced(root->left)&&isBalanced(root->right);
}
};