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

提交结果

相关推荐
烂蜻蜓6 分钟前
前端已死?什么是前端
开发语言·前端·javascript·vue.js·uni-app
老猿讲编程9 分钟前
安全C语言编码规范概述
c语言·开发语言·安全
OrangeJiuce11 分钟前
【QT中的一些高级数据结构,持续更新中...】
数据结构·c++·qt
东方芷兰1 小时前
伯克利 CS61A 课堂笔记 11 —— Mutability
笔记·python
学编程的小程3 小时前
LeetCode216
算法·深度优先
leeyayai_xixihah3 小时前
2.21力扣-回溯组合
算法·leetcode·职场和发展
01_3 小时前
力扣hot100——相交,回文链表
算法·leetcode·链表·双指针
萌の鱼3 小时前
leetcode 2826. 将三个组排序
数据结构·c++·算法·leetcode
Buling_03 小时前
算法-哈希表篇08-四数之和
数据结构·算法·散列表
AllowM3 小时前
【LeetCode Hot100】除自身以外数组的乘积|左右乘积列表,Java实现!图解+代码,小白也能秒懂!
java·算法·leetcode