题目描述
本题要求判断给定的二叉树是否是平衡二叉树
平衡二叉树的性质为: 要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过 1。
一颗树的高度指的是树的根节点到所有节点的距离中的最大值。
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return bool布尔型
*/
bool isBalanced(TreeNode* root) {
// write code here
// 空树平衡
if(!root){
return true;
}
// 非空树,判断根节点是否平衡
// 若不平衡
if(abs(maxDepth(root->left) - maxDepth(root->right)) > 1){
return false;
}
// 若根节点平衡,进行递归,判断子节点是否平衡
return isBalanced(root->left)&&isBalanced(root->right);
}
// 递归计算最大深度
int maxDepth(TreeNode* root){
if(!root){
return 0;
}
return max(maxDepth(root->left), maxDepth(root->right)) + 1;
}
};
原因分析
- 第一次错,部分答案没有通过,是因为在判断平衡时,return 两个递归没有使用and连接。