当前位置: 首页 > news >正文

LeetCode-100.相同的树

题目:
难度: 简单
知识点: 二叉树的 深度遍历DFS 和 广度遍历BFS

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
输入:p = [1,2,3], q = [1,2,3]
输出:true
输入:p = [1,2], q = [1,null,2]
输出:false

解法1:

  • p 和 q 都为 null 的时候 相同
  • p 和 q 只有一个为null 一定不相同
  • 用递归比较两棵树的左子树和右子树,
  • 有左子树并且值相同则左子树相同,
  • 有右子树并且值相同则右子树相同
/*** 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 isSameTree(p: TreeNode | null, q: TreeNode | null): boolean {if(p == null && q == null) return true // p 和 q 都为 null 的时候 相同else if(p == null || q == null) return false // p 和 q 只有一个为null 一定不相同else if(p.val !== q.val) return falseelse return isSameTree(p.left,q.left) &&   isSameTree(p.right,q.right) 
};

解法2:

  • p 和 q 都为 null 的时候 相同
  • p 和 q 只有一个为null 一定不相同
  • 使用 BFS 的方法来判断是否相同是相同树
  • 当元素出队列时,判断值是否相同,不相同则直接return fasle
  • 元素的左孩子入队列的时候,p和q一个为null 另一个不为null return fasle
  • 元素的右孩子入队列的时候,p和q一个为null 另一个不为null return fasle
  • 元素的左孩子右孩子不为null则入队列
  • 最后 两个队列,有一个队列不为空的时候直接return fasle
/*** 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 isSameTree(p: TreeNode | null, q: TreeNode | null): boolean {if(p == null && q == null) return trueelse if(p == null || q == null) return falselet pQueue = [],qQueue = []pQueue.push(p)qQueue.push(q)while(pQueue.length){let pNode = pQueue.shift()let qNode = qQueue.shift()if(pNode?.val != qNode?.val ) return false// 一个为null,另一个不为null 就不相同// 相当于java种的这种写法// if (left1 == null ^ left2 == null) {//     return false;// }// // A ^ B 的结果:// - 如果 A 和 B 相同(都为true或都为false),结果为 false// - 如果 A 和 B 不同(一个true一个false),结果为 trueif((pNode.left == null) != (qNode.left == null)) return falseif((pNode.right == null) != (qNode.right == null)) return falseif(pNode.left) pQueue.push(pNode.left) if(pNode.right) pQueue.push(pNode.right)if(qNode.left) qQueue.push(qNode.left)if(qNode.right) qQueue.push(qNode.right)}return pQueue.length == 0 && qQueue.length == 0};
http://www.hskmm.com/?act=detail&tid=14794

相关文章:

  • ubuntu安装minio并切换数据存储目录
  • 学习笔记508— 威联通安装使用Zerotier One
  • Java 语法糖大揭秘:让代码更甜更高效的幕后功臣 - 教程
  • Linux命令
  • 树上莫队
  • 比余额宝收益高的低风险短期理财工具-银行同业存单
  • 陇剑杯2025 决赛-ShellDecoder
  • Springcloud gateway笔记
  • AT_arc122_e [ARC122E] Increasing LCMs
  • C++ 锁
  • 飞书对程序员下手了,0 代码生成各类系统!!(附保姆级项目实战教程)
  • Adaptix C2:跨平台渗透测试与对抗仿真框架
  • 国标GB28181软件EasyGBS网页直播平台在邮政快递场景的落地与应用
  • sql统计一个字段各个值各有多个个的方法
  • WBS、甘特图、关键路径……项目计划的五大核心概念一文全懂
  • 智启新程:哲讯科技引领SAP ERP实施新范式
  • 移动端性能监控探索:鸿蒙 NEXT 探针架构与技术实现
  • 哲讯科技:以数智之力,铸就企业SAP ERP实施新典范
  • PR曲线绘制
  • 5台电脑怎么同步文件最安全高效?别再只知道用局域网共享了!
  • 关于CompatibilityHID例程的使用
  • SystemVerilog 代码风格指南
  • 赋能智慧化工:无锡哲讯科技SAP解决方案,构筑安全、合规与高效的数字新底座
  • 芯之所向,智造未来:无锡哲讯科技赋能芯片行业的高效管理与数字革新
  • UART、I2C、SPI:三种常见通信协议的区别
  • Day05---数据类型的转换
  • 个人项目——论文查重
  • 效率党的图片处理新选择:滴答修——在线全能工具箱,免费且强大
  • GPU0与GPU1
  • 对接全球股票市场K线数据实战