博客
关于我
leetcode-判断平衡二叉树-34
阅读量:276 次
发布时间:2019-03-01

本文共 1108 字,大约阅读时间需要 3 分钟。

给定一个二叉树,判断它是否是高度平衡的二叉树。高度平衡二叉树的定义是一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。

要解决这个问题,我们可以通过递归的方式来计算每个节点的左右子树的高度,并检查它们的高度差是否符合条件。

首先,我们需要一个辅助函数来计算二叉树的最大深度。这个函数递归地返回左子树和右子树的最大深度,然后返回较大的那个再加一。这样,我们就可以得到每个节点的深度。

然后,我们需要主函数来检查每个节点是否满足高度平衡的条件。对于每个节点,我们需要计算它的左子树和右子树的深度。如果它们的深度差的绝对值不超过1,并且左子树和右子树本身也都是高度平衡的,那么这个节点就满足条件。

我们可以通过递归的方式来实现这个检查。对于每个节点,首先检查它的左子树和右子树是否存在。如果不存在,返回true。否则,计算左右子树的深度,检查深度差是否符合条件,并且左右子树是否也都是高度平衡的。

通过这种方法,我们可以从根节点开始,逐层检查每个节点,确保整个二叉树的高度平衡。

代码实现

int maxDepth(struct TreeNode* root) {    if (root == NULL) {        return 0;    }    return max(maxDepth(root->left), maxDepth(root->right)) + 1;}bool isBalanced(struct TreeNode* root) {    if (root == NULL) {        return true;    }    int leftDepth = maxDepth(root->left);    int rightDepth = maxDepth(root->right);    return abs(leftDepth - rightDepth) <= 1 && isBalanced(root->left) && isBalanced(root->right);}

代码解释

  • maxDepth函数:这个函数递归地计算二叉树的最大深度。如果根节点不存在,返回0。否则,返回左子树和右子树深度的最大值加一。

  • isBalanced函数:这个函数递归地检查二叉树是否是高度平衡的。如果根节点不存在,返回true。否则,计算左子树和右子树的深度,检查它们的深度差是否不超过1,并且左右子树本身也都是高度平衡的。

  • 通过这种方法,我们可以有效地判断一个二叉树是否是高度平衡的。这个方法的时间复杂度是O(n),其中n是二叉树的节点数。空间复杂度是O(h),h是树的高度。

    转载地址:http://vjno.baihongyu.com/

    你可能感兴趣的文章
    python读取一个文件夹下所有图片_初学Python-找出文件夹下的所有图片
    查看>>
    Python 中 3 个不可思议的返回功能
    查看>>
    python 中 dict 的另一种用法
    查看>>
    Python 中 PIL 读取图片出现异常旋转的解决方法
    查看>>
    Python 中只有一个 True 和一个 False 对象吗?
    查看>>
    python读取mtcars数据集并实现以下操作_关于数据处理。。,Python交流,技术交流区,鱼C论坛 - Powered by Discuz!...
    查看>>
    Python 中多线程与多处理之间的区别
    查看>>
    Python 中如何使用 lambda 函数
    查看>>
    Python 中如何创建多行字符串?
    查看>>
    Python 中如何处理异常?
    查看>>
    Python 中如何实现列表的切片?
    查看>>
    Python 中如何实现字典的排序?
    查看>>
    Python 中常用的数据类型及相关操作详解
    查看>>
    Python 中的离线语音转文本
    查看>>
    Python 中的线程
    查看>>
    Python 中的继承机制是什么样的?
    查看>>
    Python 中的装饰器是什么?
    查看>>
    Python 中的装饰器是如何工作的,有哪些实际应用场景?
    查看>>
    python读excel
    查看>>
    Python 中读取 CSV 文件-ChatGPT4o作答
    查看>>