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);
}

提交结果

相关推荐
wengqidaifeng几秒前
数据结构(三)栈和队列(上)栈:计算机世界的“叠叠乐”
c语言·数据结构·数据库·链表
devmoon1 分钟前
为 Pallet 搭建最小化 Mock Runtime 并编写单元测试环境
开发语言·单元测试·区块链·智能合约·polkadot
听麟3 分钟前
HarmonyOS 6.0+ PC端虚拟仿真训练系统开发实战:3D引擎集成与交互联动落地
笔记·深度学习·3d·华为·交互·harmonyos
静听山水5 分钟前
Redis核心数据结构
数据结构·数据库·redis
Physicist in Geophy.9 分钟前
一维波动方程(从变分法角度)
线性代数·算法·机器学习
im_AMBER15 分钟前
Leetcode 115 分割链表 | 随机链表的复制
数据结构·学习·算法·leetcode
Coder_Boy_15 分钟前
Java开发者破局指南:跳出内卷,借AI赋能,搭建系统化知识体系
java·开发语言·人工智能·spring boot·后端·spring
Liue6123123116 分钟前
【YOLO11】基于C2CGA算法的金属零件涂胶缺陷检测与分类
人工智能·算法·分类
一个人旅程~17 分钟前
我存在吗?你存在吗?
笔记·程序人生·电脑·ai写作
数智工坊17 分钟前
【数据结构-树与二叉树】4.7 哈夫曼树
数据结构