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

L15.【LeetCode笔记】相同的树

目录

1.题目

代码模板

2.分析

通过合理的if判断分类讨论两个根节点

1.首先,p和q都为NULL的情况最好排除

2.排除了两个都为NULL的情况,剩下的情况:1.其中一个为NULL;2.两个都不为NULL

写法1

写法2

3.只剩下最后一种情况:p和q都不为NULL

3.代码

提交结果


1.题目

https://leetcode.cn/problems/same-tree/

给你两棵二叉树的根节点 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

提示:

  • 两棵树上的节点数目都在范围 [0, 100]
  • -10^4 <= Node.val <= 10^4

代码模板

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
bool isSameTree(struct TreeNode* p, struct TreeNode* q) 
{
}

2.分析

按根-->左子树-->右子树的顺序比较

分而治之的思想:根节点相同,递归比其的左子树节点和右子树节点;若两个子树的节点相同,分别递归比其的左子树节点和右子树节点......

根节点p和q有多种可能

情况1情况2情况3情况4
pNULL!=NULLNULL!=NULL
qNULLNULL!=NULL

!=NULL

通过合理的if判断分类讨论两个根节点

1.首先,p和q都为NULL的情况最好排除

if (p==NULL && q==NULL)return true;

2.排除了两个都为NULL的情况,剩下的情况:1.其中一个为NULL;2.两个都不为NULL

两个都不为NULL的情况是要递归处理的,因此先排除其中一个为NULL的情况

写法1
    if (p==NULL|| q==NULL)return false;
写法2
    if ((p==NULL)+(q==NULL)==1)return false;

3.只剩下最后一种情况:p和q都不为NULL

比较p->val和q->val是否相同

注意:写成if (p->val==q->val)没有什么意义,做不了任何事,判断如果不相等则返回false,否则递归比较左右子树的节点

    if (p->val!=q->val)return false;//执行到此处,说明p->val和q->val相等return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);

3.代码

bool isSameTree(struct TreeNode* p, struct TreeNode* q) 
{if (p==NULL && q==NULL)return true;//若能执行到此,排除了两个都为NULL的情况,剩下的情况:1.其中一个为NULL;2.两个都不为NULLif ((p==NULL)+(q==NULL)==1)return false;//只剩下最后一种情况:p和q都不为NULLif (p->val!=q->val)return false;//执行到此处,说明p->val和q->val相等return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}

提交结果


http://www.mrgr.cn/news/79046.html

相关文章:

  • XSS(DOM)-HIGH错误总结
  • opencv-android编译遇到的相关问题处理
  • DevOps工程技术价值流:GitLab源码管理与提交流水线实践
  • Kafka的学习路径规划
  • Hadoop分布式文件系统(二)
  • Adam 和 AdamW 优化器详解及其训练显存需求分析:以LLaMA-2 7B为例(中英双语)
  • 同时将scss全局变量注入、Tailwind样式使用、自己插件配置到vite
  • 汽车IVI中控OS Linux driver开发实操(二十七):常用Linux指令
  • 记录vite关于tailwindcss4.0-bate4出现margin[m-*]、padding[p-*]无法生效的问题。
  • 神经网络中的优化方法(一)
  • Android 应用单元测试涉及 Telephony 环境初始化问题
  • 浏览器的事件循环机制
  • 深入解析 Dubbo 中的常见问题及优化方案: 数据量限制与配置错误20241203
  • 嵌入式系统应用-LVGL的应用-平衡球游戏 part1
  • 三维地形图计算软件(四)-用PYQT5+vtk画任意多面体示例
  • 澎峰科技助力中国移动 重磅发布智算“芯合”算力原生基础软件栈2.0
  • 网络安全-夜神模拟器如何通过虚拟机的Burp Suite代理应用程序接口
  • 3GPP R18 LTM(L1/L2 Triggered Mobility)是什么鬼?(三) RACH-less LTM cell switch
  • PROTEUS资源导引
  • flask的第一个应用
  • 浏览器渲染原理
  • 异常知识及其使用
  • 级联树结构TreeSelect和上级反查
  • mybatis-xml映射文件及mybatis动态sql
  • 嵌入式蓝桥杯学习1 点亮LED
  • 003-SpringBoot整合Pagehelper