数据结构之二叉树基础OJ练习检查两颗树是否相同

检查两颗树是否相同

题目来源:

检查两颗树是否相同

题目描述:

给你两棵二叉树的根节点 pq ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

img

输入:p = [1,2,3], q = [1,2,3]
输出:true

示例 2:

img

输入:p = [1,2], q = [1,null,2]
输出:false

示例 3:

img

输入:p = [1,2,1], q = [1,1,2]
输出:false

解题思路:

二叉树的好多问题我们都要用到分治,分治就是大问题分成小问题,小问题再继续分,直到分割成不可分割的子问题,检查两颗二叉树是不是相同的,

判断两颗树是不是相同的树,首先判断他们的根节点,然后递归判断他们的左子树右子树是不是相同的树。

代码如下:

bool isSameTree(struct TreeNode* p, struct TreeNode* q){
	if(p == NULL && q==NULL)
        return true;
    if(p==NULL || q==NULL)
        return false;
    
    //p和q都不为NULL
    if(p->val!=q->val)
        return false;
    return isSameTree(p->left,q->left)
        && isSameTree(p->right,q->right);
}

如果p和q都为空时,说明两颗树都为空树,返回true,,如果第一个if语句没返回说明p、q至少有一个不为空,然后如果p、q有一个为空就返回false,当p、q都不为空时,判断p、q的值相等不相等,不相等返回false,然后再递归左子树右子树,判断左子树和右子树是不是相同的树,时间复杂度为O(N),N个节点比较N次,空间复杂度:O(h)->h(高度)最坏是N,开辟栈帧是高度次,空间是可以重复利用的,栈帧调用完还给操作系统,会重复利用这块空间

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小赵小赵福星高照~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值