学习记录:js算法(四十七):相同的树

文章目录

    • 相同的树
      • 我的思路
      • 网上思路
        • 队列
        • 序列化方法
    • 总结

相同的树

给你两棵二叉树的根节点 pq ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

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

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

图三:
在这里插入图片描述

示例 1:图一
输入:p = [1,2,3], q = [1,2,3]
输出:true示例 2:图二
输入:p = [1,2], q = [1,null,2]
输出:false示例 3:图三
输入:p = [1,2,1], q = [1,1,2]
输出:false

我的思路
递归
网上思路

我的思路

var isSameTree = function (p, q) {if (p === null && q === null) {return true;}if (p === null || q === null) {return false;}if (p.val !== q.val) {return false;}return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
};

讲解
基本情况:

  • 如果 p 和 q 都是 null,返回 true。
  • 如果只有一个是 null,返回 false。
  • 如果两个节点的值不同,返回 false。
    递归:
  • 递归调用 isSameTree 来比较左子树和右子树。
  • 只有当左子树和右子树都相同时,整个树才相同。

网上思路

队列
 var isSameTree = function (p, q) {const queue = [[p, q]]; // 初始化队列,存储节点对while (queue.length > 0) {const [node1, node2] = queue.shift(); // 从队列中取出一对节点// 如果两个节点都是 null,继续比较下一个if (node1 === null && node2 === null) {continue;}// 如果只有一个节点是 null,或者值不同,返回 falseif (node1 === null || node2 === null || node1.val !== node2.val) {return false;}// 将左右子节点加入队列queue.push([node1.left, node2.left]);queue.push([node1.right, node2.right]);}return true; // 如果遍历完成都没有发现不同,返回 true
}

讲解

  1. 初始化队列 创建一个队列,将两棵树的根节点 pq 成对放入队列。
  2. 循环遍历 当队列不为空时,进行以下操作:
    2.1. 取出节点对 从队列中取出一对节点 node1node2
    2.2. 检查是否都为 null 如果 node1node2 都是 null,继续下一对节点的比较。
    2.3. 检查是否有一个为 null 如果只有一个节点是 null,或两个节点的值不同,返回 false
    2.4. 入队左右子节点 如果两个节点都存在,将它们的左右子节点成对放入队列。
  3. 返回结果 如果队列处理完毕且没有发现不同,返回 true
序列化方法
var isSameTree = function (p, q) {function serialize(root) {if (root === null) {return 'null,'; // 用 'null' 表示空节点}// 先序遍历,节点值与左右子树的序列化结果return root.val + ',' + serialize(root.left) + serialize(root.right);}// 序列化两棵树并比较return serialize(p) === serialize(q);
};

讲解
序列化函数 serialize(root):

  • 编写一个辅助函数,将二叉树转换为字符串。可以使用前序遍历(pre-order traversal)来实现。
  • 如果当前节点是 null,返回字符串 ‘null,’。
  • 否则,返回当前节点的值与左右子树的序列化结果,使用逗号 , 分隔。
    主函数 isSameTree(p, q):
  • 调用 serialize 函数对两棵树进行序列化。
  • 比较两个序列化后的字符串,若相同则返回 true,否则返回 false。

总结

序列化的方法看起来挺不错的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1548061.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的“在线汽车交易系统”的设计与实现(源码+数据库+文档+开题报告)

基于SSM的“在线汽车交易系统”的设计与实现(源码数据库文档开题报告) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体设计图 首页 新闻信息 用户注册 后台登录界面…

Llama 3.2:轻量级设计与多模态能力

前沿科技速递🚀 9月26日Meta 推出了 Llama 3.2,这是一个前沿的多模态大语言模型系列。该系列包括轻量级文本模型(1B 和 3B)以及视觉模型(11B 和 90B),专为在边缘和移动设备上的高效应用而设计。…

学习之什么是生成器

什么是生成器(Generator) 1、是一种数据类型能源源不断地生成数据 2、"惰性"特点:一次生成一个值,而不是生成一个序列 3、生成器一定是迭代器比迭代器更简洁使用生成器表达式创建生成器 from typing import Generator, Iterator,…

OCR识别系统 YOLOv8 +Paddle 方案落地

YOLOv8 PaddleOCR 技术方案落地 Yolov8相关文档Step 1 证件模型的训练Step 2 Yolov8进行图片推理Step 3 PaddleOCR进行识别Step 4 整合Yolov8 PaddleOCR 进行OCR Yolov8相关文档 《yolov8 官方网站》 《Yolov8 保姆级别安装》 Ultralytics YOLOv8 是一款尖端的、最先进的 (S…

深入探索与实战:高效利用苏宁商品详情API实现精准数据抓取与解析技术

在电商平台的开发中,获取商品详情是构建用户购物体验的重要一环。苏宁作为国内领先的电商平台,提供了丰富的商品信息和API接口供开发者使用。本文将介绍如何通过苏宁的商品详情接口获取特定商品的详细信息,并给出Python代码示例。 点击获取ke…

DreamBench++:由清华大学和西安交通大学等联合创建:一种人机交互的个性化图像生成基准测试

2024-07-10,由清华大学和西安交通大学等机构联合创建的DreamBench,这个任务目的是通过使用先进的多模态GPT模型来自动化评估,实现与人类评估一致的结果,从而提高个性化图像生成的可靠性和准确性。 一、引言: 个性化图…

Maven项目常见各类 QA

一、pom.xml文件 1.1 there is no POM in this directory [ERROR] The goal you specified requires a project to execute but there is no POM in this directory (/home/cys/SEtesting/example/smartut-report). Please verify you invoked Maven from the correct directo…

消费类摄像头热销海内外,萤石出货量全球排名第一

随着消费者对家庭安全、便捷生活的需求日益增长,智能摄像头作为智能家居的重要组成部分,其市场需求将持续扩大。 IDC《全球智能家居设备市场季度跟踪报告,2024年第二季度》显示,二季度全球智能摄像头市场(包含消费级室…

Vue2项目中vuex如何简化程序代码,提升代码质量和开发效率

Vuex为Vue中提供了集中式存储 库,其主要分为state、getter、mutation、action四个模块,它们每个担任了不同角色,分工不同;Vuex允许所有的组件共享状态抽取出来,以一个全局单例模式管理,状态集中存储在同一…

AniJS:无需编程的动画解决方案

前言 在网页设计中,动画效果能够显著提升用户体验,但传统的动画实现往往需要复杂的 JavaScript 代码。 AniJS 库的出现,为设计师和开发者带来了一种全新的动画实现方式,它通过简单的 HTML 属性就能创建出令人惊叹的动画效果。 介…

文档解析与向量化技术加速 RAG 应用落地

在不久前举办的 AICon 全球人工智能开发与应用大会上,合合信息智能创新事业部研发总监,复旦博士常扬从 RAG 应用落地时常见问题与需求(文档解析、检索精度)出发,分享了针对性的高精度、高泛化性、多版面多元素识别支持…

LeetCode[中等] 138. 随机链表的复制

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 n…

贴片式TF卡(SD NAND)参考设计

【MK 方德】贴片 TF 卡参考设计 一、电路设计 1、 参考电路: R1~R5 (10K-100 kΩ)是上拉电阻,当 SD NAND 处于高阻抗模式时,保护 CMD 和 DAT 线免受总线浮动。 即使主机使用 SD NAND SD 模式下的 1 位模式,主机也应通过上拉电阻…

SpringBoot 流式输出时,正常输出后为何突然报错?

一个 SpringBoot 项目同时使用了 Tomcat 的过滤器和 Spring 的拦截器&#xff0c;一些线程变量在过滤器中初始化并在拦截器中使用。 该项目需要调用大语言模型进行流式输出。 项目中&#xff0c;笔者使用 SpringBoot 的 ResponseEntity<StreamingResponseBody> 将流式输…

照片压缩方法分享,掌握这些小技巧轻松压缩

照片已成为我们记录生活、分享美好的重要方式。然而&#xff0c;随着手机像素的不断提升&#xff0c;照片文件体积也越来越大&#xff0c;给存储和传输带来了不小的挑战。今天&#xff0c;就为大家介绍几种高效的照片压缩方法&#xff0c;掌握这些方法就能够轻易对图片进行压缩…

寻找右区间

题目链接 寻找右区间 题目描述 注意点 -10^6 < starti < endi < 10^6每个间隔的起点都 不相同如果某个区间 i 不存在对应的 右侧区间 &#xff0c;则下标 i 处的值设为 -1 解答思路 因为本题需要找到每个interval大于interval对应end的最小start值&#xff0c;所…

vue-i18n在使用$t时提示类型错误

1. 问题描述 Vue3项目中&#xff0c;使用vue-i18n&#xff0c;在模版中使用$t时&#xff0c;页面可以正常渲染&#xff0c;但是类型报错。 相关依赖版本如下&#xff1a; "dependencies": {"vue": "^3.4.29","vue-i18n": "^9.1…

红绿灯倒计时读秒数字识别系统源码分享

红绿灯倒计时读秒数字识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of …

小程序开发平台源码系统 各行各业适用的小程序开的平台 带完整的安装代码包以及搭建部署教程

系统概述 本系统采用模块化设计&#xff0c;包含前端展示层、后端逻辑处理层、数据库存储层以及管理后台等多个核心组件。前端展示层负责小程序的界面设计与交互体验&#xff1b;后端逻辑处理层则负责数据处理、业务逻辑实现及与第三方服务的对接&#xff1b;数据库存储层用于…

符合二级等保要求的SSL证书

根据等级保护对象在国家安全、经济建设、社会生活中的重要程度&#xff0c;以及一旦遭到破坏、丧失功能或者数据被篡改、泄露、丢失、损毁后&#xff0c;对国家安全、社会秩序、公共利益以及公民&#xff0c;法人和其他组织的合法权益的侵害程度等因素&#xff0c;等级保护对象…