• LeetCode第100题—相同的树


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

    🌱分析阶段

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

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

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

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

    ⭕对示例一来说:

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

    ⭕对示例二来说:

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

    ⭕对示例三来说:

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

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

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

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


    🌱代码阶段

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

    1. class Solution {
    2. public boolean isSameTree(TreeNode p, TreeNode q) {
    3. //在每走进一次该函数的时候,我们都是对此时位置的判断。
    4. if(p==null&&q==null) return true; //在本轮中,如果两个都是null,说明该位置相同,返回true
    5. if(p==null&&q!=null) return false; //在本轮中,如果只有其中一个是null,说明该位置结构不同,返回false
    6. if(p!=null&&q==null) return false; //在本轮中,如果只有其中一个是null,说明该位置结构不同,返回false
    7. if(p.val!=q.val) return false; //撑到了这行代码,说明两个结构相同,都不是null,那就要比较值,如果只不同,返回false
    8. //我们要判断树相同,则要保证每一个位置完全相同,也就是每个节点的左树和右树分别对应相同
    9. return isSameTree(p.left,q.left) && isSameTree(p.right,q.right); //运用&&的原因是要让其满足左、右树都一样这个原因。
    10. }
    11. }

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

     nice😎✨

  • 相关阅读:
    搭建nexus私服部署项目
    95、Spring Data Redis 之使用RedisTemplate 实现自定义查询 及 Spring Data Redis 的样本查询
    c++中用opengl的gl函数在三维空间中绘制圆形和画球体
    RFID智能档案柜助力各大银行实现RFID智能档案管理
    关于jar包的一些思考
    docker-compose安装gitlab
    字符串的转换路径问题
    企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)
    select服务器和poll客户端
    node-sass安装失败的解决方法
  • 原文地址:https://blog.csdn.net/Green_756/article/details/126708468