LeetCode第100题—相同的树

本次写的题目是相同的树,为相同的树里面的题目,让我们来康康是如何解出这道题目的吧,各位尚没有思路的小伙伴可以跟随着博主的解题思路一步步来,感受一下😎

🌱分析阶段

由题目中我们可以得知,要返回一个判断结果,判断两棵树是否相同。

要解决这个问题,我们需要有一个做题思路:子问题思路✨

子问题思路相当于一种分析问题的技巧,也就是先在示例中进行思路的演示,过程中针对每个相同的小问题进行总结出比较统一的解决方法,最后的解决用递归来总结。

这样子说起来有些抽象,我们可以结合图来分析👇:

⭕对示例一来说:

要判定两个树相同,则需要各个节点的值相同,位置也相同,要完全对应,也就是我们传入的参数要位置相同,p传左树,那么q也要传左树;反之如果p是传右树,那么q也要传右树。

⭕对示例二来说:

我们前面知道了p和q是两棵树中对应的相同位置,但如果过程中左数或者右树为空,那么我们就需要在这个过程中直接返回false结果证明这两棵树是不同的。

⭕对示例三来说:

如果没有空树,结构一样,就需要判断数据是不是相同,如果是相同则相同,如果在某个位置节点对比的过程中值不同,则也要返回false。

  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

如果能走到最后,则说明该位置的节点是对应完全相同的,所以可以返回true。而我们需要用到递归,来使得遍历每一个位置,保证过程中全部都要判定为true,有一个false都不可以。

以上便是全部的分析阶段,可能还是有些抽象,我们可以继续结合着代码看😎


🌱代码阶段

结合上面的分析,我们写出下面函数👇:

class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        //在每走进一次该函数的时候,我们都是对此时位置的判断。

        if(p==null&&q==null) return true;   //在本轮中,如果两个都是null,说明该位置相同,返回true
        if(p==null&&q!=null) return false;  //在本轮中,如果只有其中一个是null,说明该位置结构不同,返回false
        if(p!=null&&q==null) return false;  //在本轮中,如果只有其中一个是null,说明该位置结构不同,返回false
        if(p.val!=q.val) return false;  //撑到了这行代码,说明两个结构相同,都不是null,那就要比较值,如果只不同,返回false
        //我们要判断树相同,则要保证每一个位置完全相同,也就是每个节点的左树和右树分别对应相同
        return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);    //运用&&的原因是要让其满足左、右树都一样这个原因。
    }
}

以上,就是全部代码了,十分的精简,小伙伴们可以结合注释一起看😎来运行下逝逝吧~

 nice😎✨

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值