博客
关于我
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/

    你可能感兴趣的文章
    OSG学习:场景图形管理(四)——多视图多窗口渲染
    查看>>
    OSG学习:新建C++/CLI工程并读取模型(C++/CLI)——根据OSG官方示例代码初步理解其方法
    查看>>
    Sql 随机更新一条数据返回更新数据的ID编号
    查看>>
    OSG学习:空间变换节点和开关节点示例
    查看>>
    OSG学习:纹理映射(一)——多重纹理映射
    查看>>
    OSG学习:纹理映射(七)——聚光灯
    查看>>
    OSG学习:纹理映射(三)——立方图纹理映射
    查看>>
    OSG学习:纹理映射(二)——一维/二维/简单立方图纹理映射
    查看>>
    OSG学习:纹理映射(五)——计算纹理坐标
    查看>>
    OSG学习:纹理映射(六)——灯光
    查看>>
    OSG学习:纹理映射(四)——三维纹理映射
    查看>>
    OSG:从源码看Viewer::run() 一
    查看>>
    OSI七层模型与TCP/IP四层与五层模型详解
    查看>>
    OSI七层模型的TCP/IP模型都有哪几层和他们的对应关系?
    查看>>
    OSM数据如何下载使用(地图数据篇.11)
    查看>>
    OSPF 四种设备角色:IR、ABR、BR、ASBR
    查看>>
    OSPF 学习
    查看>>
    OSPF 概念型问题
    查看>>
    SQL Server 存储过程分页。
    查看>>
    OSPF不能发现其他区域路由时,该怎么办?
    查看>>