【LeetCode练习】剑指 Offer 26. 树的子结构(中等|JS|递归)

一、题目描述

在这里插入图片描述

二、解题思路

写在注释里面。

三、代码实现

var isSubStructure = function (A, B) {
    if (!B || !A) return false      
    // 如果这次递归传进来的两个根节点相同,那么就从这两个根节点开始,对它们的左右子树对应来判断是否相等
    if(A.val == B.val && helper(A.left,B.left) && helper(A.right,B.right)) return true
    // 这里如果第一次传进来的AB根节点都不相同,那么就会进递归,分别判断A的左子树和右子树是否存在B的结构,所以这里用或关系即可
    return isSubStructure(A.left,B) || isSubStructure(A.right,B)

    // 帮助A和B左右子树对应来判断是否相等
    function helper(nodeA,nodeB){
        // 判断到B本身已经没有后续节点了(前面的节点在A里面都有),不管A后面还有没有,B就已经属于A的一部分了
        if(nodeB == null) return true
        // 这里B树还有后续节点,但A已经空了,证明A树里面没有B树的结构,直接对这次递归返回false,这个和上面的判空顺序不能对换
        if(nodeA == null) return false
        // 这里A和B又相等,那么就继续往下面递归
        if(nodeA.val == nodeB.val) return helper(nodeA.left,nodeB.left) && helper(nodeA.right,nodeB.right)
        // AB不相等,那么直接返回false即可
        else return false
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值