首页 > 编程语言 >数据结构与算法之二叉树: LeetCode 110. 平衡二叉树 (Ts版)

数据结构与算法之二叉树: LeetCode 110. 平衡二叉树 (Ts版)

时间:2025-01-12 13:58:53浏览次数:3  
标签:node right TreeNode val Ts 110 left null 二叉树

平衡二叉树

描述

  • 给定一个二叉树,判断它是否是 平衡二叉树

示例 1

输入:root = [3,9,20,null,null,15,7]
输出:true

示例 2

输入:root = [1,2,2,3,3,null,null,4,4]
输出:false

示例 3

输入:root = []
输出:true

提示

  • 树中的节点数在范围 [0, 5000] 内
  • - 1 0 4 10^4 104 <= Node.val <= 1 0 4 10^4 104

Typescript 版算法实现


1 ) 方案1: 自顶向下的递归

/**
 * Definition for a binary tree node.
 * class TreeNode {
 *     val: number
 *     left: TreeNode | null
 *     right: TreeNode | null
 *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.left = (left===undefined ? null : left)
 *         this.right = (right===undefined ? null : right)
 *     }
 * }
 */

function isBalanced(root: TreeNode | null): boolean {
    if (!root) return true;

    const height = (node: TreeNode | null): number => {
        if (!node) return 0;
        return Math.max(height(node.left), height(node.right)) + 1;
    }

    const leftHeight = height(root.left);
    const rightHeight = height(root.right);

    return (
        Math.abs(leftHeight - rightHeight) <= 1 &&
        isBalanced(root.left) &&
        isBalanced(root.right)
    );
}

2 ) 方案2: 自底向上的递归

/**
 * Definition for a binary tree node.
 * class TreeNode {
 *     val: number
 *     left: TreeNode | null
 *     right: TreeNode | null
 *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.left = (left===undefined ? null : left)
 *         this.right = (right===undefined ? null : right)
 *     }
 * }
 */

function isBalanced(root: TreeNode | null): boolean {
    function height(node: TreeNode | null): number {
        if (!node) return 0;
        const leftHeight = height(node.left);
        const rightHeight = height(node.right);
        // 如果左右子树中任意一个不平衡,或者高度差超过1,则当前树也不平衡
        if (leftHeight === -1 || rightHeight === -1 || Math.abs(leftHeight - rightHeight) > 1) {
            return -1;
        }
        return Math.max(leftHeight, rightHeight) + 1;
    }

    return height(root) !== -1;
}

标签:node,right,TreeNode,val,Ts,110,left,null,二叉树
From: https://blog.csdn.net/Tyro_java/article/details/144994166

相关文章

  • 数据结构与算法之二叉树: LeetCode 117. 填充每个节点的下一个右侧节点指针 II (Ts版)
    填充每个节点的下一个右侧节点指针IIhttps://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii/description/描述给定一个二叉树:structNode{intval;Node*left;Node*right;Node*next;}填充它的每个next指针,让这个指针指向其......
  • SAP Business One水晶报表报错(二)连接到 SAP Crystal Reports 2011 时出错;请检查是否已
    SAPBusinessOne水晶报表报错连接到SAPCrystalReports2011时出错;请检查是否已正确安装SAPCrystalReports2011解决方案:本文档包含重新安装SAPCrystalReports和关联的SAPBusinessOne组件时要遵循的步骤:确保您有权访问SAPBusinessOne和SAPCrysta......
  • 【Java】二叉树:数据海洋中灯塔式结构探秘
    二叉树(BinaryTree)是一种基础且重要的树形数据结构,它是数据存储和操作的基础,广泛应用于各种场景,如数据库索引、图像处理、解析表达式等。在各种树形数据结构中,二叉树就像一座灯塔,引导我们在复杂的数据海洋中高效地进行数据处理。在本篇文章中,我们将深入探讨二叉树的基本......
  • 转:CELERY CELERY_QUEUES和CELERY_ROUTS的用法
    转自:https://www.jianshu.com/p/4d0bbdbc6ade?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation1.介绍Celery非常容易设置,通常都是使用默认的queue来存放任务,写法如下:@app.taskdeftask1(x,y):for_inrange(10):......
  • cursor试用出现:Too many free trial accounts used on this machine 的解决方法
    文章精选推荐1JetBrainsAiassistant编程工具让你的工作效率翻倍2ExtraIcons:JetBrainsIDE的图标增强神器3IDEA插件推荐-SequenceDiagram,自动生成时序图4BashSupportPro这个ides插件主要是用来干嘛的?5IDEA必装的插件:SpringBootHelper的使用与功能特点6A......
  • Vue2+OpenLayers调用WMTS服务初始化天地图示例
    目录一、案例截图二、安装OpenLayers库三、WMTS服务详解四、完整代码五、Gitee源码一、案例截图二、安装OpenLayers库npminstallol三、WMTS服务详解WMTS(WebMapTileService)是一种标准的网络地图服务协议,用于提供基于瓦片的地图数据。它允许客户端请求地图的具......
  • RepPoints: Point Set Representation for Object Detection—用于目标检测的点集表示
    用于目标检测的点集表示-RepDet全网最全InternationalConferenceonComputerVision(ICCV2019)对这种检测模型生成的点进行基于点的匹配过程完成跟踪但是可否保证随着人的运动或者形状的改变每次选取的关键点是否一致呢?文章目录用于目标检测的点集表示-RepDet全......
  • Ubuntu 22.04LTS版本二进制部署K8S 1.30+版本
    Ubuntu22.04LTS版本二进制部署K8S1.30+版本 目录一.K8S集群各主机环境准备1.环境准备2.所有节点安装常用的软件包3.k8s-master01节点免密钥登录集群并同步数据4.所有节点Linux基础环境优化5.所有节点安装ipvsadm以实现kube-proxy的负载均衡二.安装containerd组......
  • IPOIB驱动中RSS和TSS相关功能的实现:以ipoib_main_rss.c为例
    一、引言在现代网络通信领域,InfiniBandoverEthernet(IPoIB)驱动的高效性对于网络性能有着至关重要的影响。其中,接收方扩展(RSS)和传输方扩展(TSS)是提升网络性能的关键技术。ipoib_main_rss.c文件作为IPoIB驱动中处理RSS和TSS的重要源码文件,蕴含着丰富的功能和复杂的......
  • 最全ECharts 实战大全(超全版)
    常用属性配置title标题配置text-标题文本,例如“柱状图”subtext-副标题文本****left标题的水平位置,可以是像’left’‘center’‘right’或者像’20%’这样的百分比top***-标题的垂直位置,可以是像‘top’,**‘middle’,**‘bottom’**或者像****‘20%’......