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

代码模板

cpp 复制代码
/**
 * 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 |
| p | NULL | !=NULL | NULL | !=NULL |
| q | NULL | NULL | !=NULL | !=NULL |

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

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

cpp 复制代码
if (p==NULL && q==NULL)
        return true;

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

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

写法1
cpp 复制代码
    if (p==NULL|| q==NULL)
        return false;
写法2
cpp 复制代码
    if ((p==NULL)+(q==NULL)==1)
        return false;

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

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

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

cpp 复制代码
    if (p->val!=q->val)
        return false;

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

3.代码

cpp 复制代码
bool isSameTree(struct TreeNode* p, struct TreeNode* q) 
{
    if (p==NULL && q==NULL)
        return true;

     //若能执行到此,排除了两个都为NULL的情况,剩下的情况:1.其中一个为NULL;2.两个都不为NULL
    if ((p==NULL)+(q==NULL)==1)
        return false;

    //只剩下最后一种情况:p和q都不为NULL
    if (p->val!=q->val)
        return false;

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

提交结果

相关推荐
良木生香5 分钟前
【C++初阶】:STL——String从入门到应用完全指南(1)
c语言·开发语言·数据结构·c++·算法
Bug 挖掘机20 分钟前
一篇理清Prompt,Skill,MCP之间的区别
开发语言·软件测试·python·功能测试·测试开发·prompt·ai测试
XWalnut24 分钟前
LeetCode刷题 day16
数据结构·算法·leetcode·链表·动态规划
寒秋花开曾相惜40 分钟前
(学习笔记)4.1 Y86-64指令集体系结构(4.1.4 Y86-64异常&4.1.5 Y86-64程序)
开发语言·jvm·数据结构·笔记·学习
码界筑梦坊1 小时前
302-基于Python的安卓应用市场数据可视化分析推荐系统
开发语言·python·信息可视化·毕业设计·fastapi
Theodore_10221 小时前
深度学习(15):倾斜数据集 & 精确率-召回率权衡
人工智能·笔记·深度学习·机器学习·知识图谱
不会聊天真君6471 小时前
JavaScript基础语法(Web前端开发笔记第三期)
前端·javascript·笔记
Eyfcom1 小时前
快递管理系统:从“功能实现”到“人性化体验”与“客户洞察”的技术跃迁
c语言·系统架构·快递管理系统
LiLiYuan.2 小时前
【Java 6种线程状态】
java·开发语言
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.2 小时前
Redis主从复制配置全攻略
数据库·redis·笔记