学习记录:js算法(四十六):平衡二叉树

news/2024/11/16 22:10:13/

文章目录

    • 平衡二叉树
      • 我的思路
      • 网上思路
    • 总结

平衡二叉树

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

图一
在这里插入图片描述
图二
在这里插入图片描述

示例 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

我的思路
递归
网上思路

我的思路

var isBalanced = function (root) {function checkBalance(node) {if (!node) return 0;const leftHeight = checkBalance(node.left);if (leftHeight === -1) return -1;const rightHeight = checkBalance(node.right);if (rightHeight === -1) return -1;if (Math.abs(leftHeight - rightHeight) > 1) {return -1;}return Math.max(leftHeight, rightHeight) + 1;}return checkBalance(root) !== -1;
};

讲解

  1. isBalanced 函数: 主函数,用于判断是否平衡。
  2. checkBalance 函数: 辅助函数,递归检查每个节点的左右子树高度差。
    • 如果节点为空,返回高度 0
    • 递归计算左子树和右子树的高度。
    • 如果发现任何子树不平衡,返回 -1
    • 如果当前节点的左右子树高度差大于 1,也返回 -1
    • 否则,返回当前节点的高度。
  3. 如果 checkBalance 返回值不是 -1,说明树是平衡的。

网上思路

var isBalanced = function (root) {if (root == null) return true;const depth = (root) => {if (root == null) return 0;return Math.max(depth(root.left), depth(root.right)) + 1;};return (Math.abs(depth(root.left) - depth(root.right)) < 2 &&isBalanced(root.left) &&isBalanced(root.right));
};

讲解

  1. 函数定义:
    定义一个名为 isBalanced 的函数,接受一个参数 root,表示二叉树的根节点。
  2. 基准条件:
    如果树的根节点为空,返回 true,因为空树被认为是平衡的。
  3. 深度计算函数:
    • 定义一个名为 depth 的递归函数,用于计算树的高度。
    • if (root == null) return 0: 如果当前节点为空,返回高度 0
    • return Math.max(depth(root.left), depth(root.right)) + 1:递归调用 depth 函数来计算左子树和右子树的高度,取较大值并加 1,以计算当前节点的高度。
  4. 平衡性检查:
    通过逻辑与运算符 && 来检查以下条件
    • Math.abs(depth(root.left) - depth(root.right)) < 2:检查当前节点的左右子树高度差是否小于 2。如果高度差大于或等于 2,说明当前节点不平衡。
    • isBalanced(root.left):递归检查左子树是否平衡。
    • isBalanced(root.right): 递归检查右子树是否平衡。

总结

递归好用


http://www.ppmy.cn/news/1531288.html

相关文章

第五章 COMMIT新镜像到本地

目录 一、拉取并启动Tomcat镜像 二、更新tomcat的内容 三、提交容器生成新镜像 四、运行新镜像 本章节内容较为简单&#xff0c;通过commit命令用来将容器的当前变更状态保存为一个新镜像到本地作为后续使用&#xff0c;我们也可以将这个新commit的镜像从本地推送到阿里云或…

asp.net core日志与异常处理小结

asp.net core的webApplicationBuilder中自带了一个日志组件,无需手动注册服务就能直接在控制器中构造注入&#xff0c;本文主要介绍了net core日志与异常处理小结&#xff0c;需要的朋友可以参考下 ILogger简单使用 asp.net core的webApplicationBuilder中自带了一个日志组件…

4、FPGA特征简介

1、FPGA器件简介 FPGA是由存放在片内的RAM来设置其工作状态的&#xff0c;因此工作时需要对片内RAM进行编程。用户可根据不同的配置模式&#xff0c;采用不同的编程方式。FPGA有如下几种配置模式。 1&#xff09;并行模式&#xff1a;一片EPROM配置一片FPGA。 2&#xff09;主从…

Python知识点:如何使用Python进行卫星数据分析

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; 如何使用Python进行卫星数据分析 卫星数据分析是地球观测领域的一项关键技术&a…

【Python-tkinter】实现简单的文本编辑器(附带教程源码)

如果你也是刚入门的小伙伴呢&#xff0c;小编为你们准备了入门Python学习籽料和Python入门实践&#xff0c;点击领取&#xff08;无偿获得&#xff09; 利用tkinter实现简单的文本编辑器。创建一个简单的文本编辑器。可以用读文件的方式在一个文本域里显示一些文字供用户编辑…

【STM32系统】基于STM32设计的智能垃圾桶(语音、颜色识别、称重、光强、烟雾、人体识别、步进电机、水泵)——文末资料下载

基于STM32设计的智能垃圾桶 演示视频: 基于STM32设计的智能垃圾桶 功能简介: 四个按键可分别打开四个垃圾桶(可回收垃圾、厨余垃圾、有害垃圾、其他垃圾) oled显示屏显示四个垃圾桶的打开/关闭状态、烟雾浓度、光照强度、称重的重量和识别到的颜色(白色、红色、绿色、蓝…

基于C+++Mysql实现(CS界面)图书管理系统

图书管理系统 实验内容、步骤以及结果 做出数据流图和数据字典。 在数据流图和字典的基础上做出 E-R 图(概念结构设计)。 学生&#xff1a; 图书&#xff1a; 管理员&#xff1a; 汇总&#xff1a; 在 E-R 图基础上进行关系模式设计&#xff08;至少满足 3NF&#xff09;&am…

【专题】2024年中国白酒行业数字化转型研究报告合集PDF分享(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p37755 消费人群趋于年轻化&#xff0c;消费需求迈向健康化&#xff0c;消费场景与渠道走向多元化&#xff0c;这些因素共同驱动企业凭借数据能力来适应市场的变化。从消费市场来看&#xff0c;消费群体、需求、场景及渠道皆展现出与…