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

    你可能感兴趣的文章
    OpenCV使用霍夫变换检测图像中的形状
    查看>>
    opencv保存图片路径包含中文乱码解决方案
    查看>>
    opencv图像分割2-GMM
    查看>>
    opencv图像分割3-分水岭方法
    查看>>
    opencv图像切割1-KMeans方法
    查看>>
    OpenCV图像处理篇之阈值操作函数
    查看>>
    OpenCV学习(13) 细化算法(1)(转)
    查看>>
    OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
    查看>>
    OpenCV学堂 | OpenCV案例 | 基于轮廓分析对象提取
    查看>>
    OpenCV官方文档 理解k - means聚类
    查看>>
    OpenCV探索
    查看>>
    openCV目标识别 目标跟踪 YOLO5深度学习 Python 计算机视觉 计算机毕业设计 源码下载
    查看>>
    opencv笔记(1):图像缩放
    查看>>
    opencv笔记(二十四)——得到轮廓之后找到凸包convex hull
    查看>>
    OpenCV计算点到直线的距离 数学法
    查看>>
    Opencv识别图中人脸
    查看>>
    opencv面向对象设计初探
    查看>>
    OpenCV(1)读写图像
    查看>>
    OpenCV:不规则形状区域中每种颜色的像素数?
    查看>>
    OpenCV:概念、历史、应用场景示例、核心模块、安装配置
    查看>>