题目描述
本题要求判断给定的二叉树是否是平衡二叉树
平衡二叉树的性质为: 要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过 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连接。
本文介绍了一种判断二叉树是否为平衡二叉树的方法。平衡二叉树定义为任意节点的左右子树高度差不超过1。文章提供了一个C++实现方案,并详细解释了递归算法的工作原理。
6525

被折叠的 条评论
为什么被折叠?



