题解 | #树的子结构#

树的子结构

https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88

这个问题写了两个递归函数。上帝真有意思啊。
 function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} 
function HasSubtree(pRoot1, pRoot2)//这个函数的作用是:判断以pRoot1为根的树所能形成的所有子结构是否包含pRoot2这样的结构。
// 重点就在这里,所谓的所有子结构包括了:
//     以pRoot1为根的所有树;
//     以pRoot1的左节点为根的所有树,以pRoot1的右节点为根的所有树;
//     以pRoot1的左节点的左节点为根的所有树。。。。。。

    // 1,上帝给了我一个函数,这个函数可以判断以pRoot1为根的树所能形成的所有子结构是否包含pRoot2这样的结构。
{
    // 2,但是不能把它直接还给上帝,不然上帝会生气的。至少要做点最简单情况的处理。
    // 特殊处理:空树
    if(pRoot1 === null || pRoot2 === null){
        return false;
    }
    return isSubtree(pRoot1, pRoot2) // 特殊处理:判断以pRoot1为根的所有树是否包含pRoot2这样的树结构
    // 3,最简单的情况处理完,剩下的用上帝写好的函数处理。
    || HasSubtree(pRoot1.left, pRoot2)   //判断以pRoot1的左子树为根的树所能形成的所有子结构是否包含pRoot2这样的树结构
    || HasSubtree(pRoot1.right, pRoot2); //判断以pRoot1的右子树为根的树所能形成的所有子结构是否包含pRoot2这样的树结构
}

function isSubtree(rootA, rootB){// 这个函数的作用是:判断以A为根节点的所有树是否包含树B这样的结构
    // 1,上帝给了我一个函数,这个函数可以判断以A为根节点的所有树是否包含树B这样的结构。
    // 2,但是不能把它直接还给上帝,不然上帝会生气的。至少要做点最简单情况的处理。
    // 特殊处理:
    // 如果rootB为空,证明rootB已经比较完了,当前树A完整地包含了树B。或者说,任何树都包含了空树这样的结构。
    if(rootB === null){
        return true;
    }
    // 如果rootB不为空,但是rootA为空,说明当前树A没有完整地包含树B。或者说,空树不会包含除了空树外的任何树结构。
    else if(rootA === null){
        return false;
    }
    // 如果二者都不为空,就判断val值,值不相同所以不包含
    else if(rootA.val !== rootB.val){
        return false;
    }
    // 3,最简单的情况处理完,剩下的用上帝写好的函数处理。
    return isSubtree(rootA.left, rootB.left) // 判断以A的左子树为根节点的所有树是否包含B的左子树这样的结构
    && isSubtree(rootA.right, rootB.right);  // 判断以A的右子树为根节点的所有树是否包含B的右子树这样的结构
}

module.exports = {
    HasSubtree : HasSubtree
};



全部评论

相关推荐

争当牛马还争不上
码农索隆:1.把简历改哈 2.猛投,狠投 3.把基础打牢 这样你在有机会的时候,才能抓住
点赞 评论 收藏
分享
asdasdasda...:19岁,不容易啊可能升个本会好点,现在学历歧视太严重了
点赞 评论 收藏
分享
程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 17:28
25届每天都在焦虑找工作的事情0offer情绪一直很低落硬撑着面了一个岗位岗位有应酬的成分面试的时候hr给我出各种场景题问的问题比较犀利 有点压力面的感觉感觉有点回答不上来本来就压抑的情绪瞬间爆发了呢一瞬间特别想哭觉得自己特别没用没绷住掉眼泪了事后想想觉得自己挺有病的 真的破大防了
喜欢唱跳rap小刺猬...:我觉得没关系吧,之前有一次面试leader给我压力面,我顶住了压力,结果入职的时候发现组里氛围很差,果断跑路。其实从面试就能大概看出组的情况,面试体验好的组倒是不一定好,但是面试体验不好的组。。。就很难说
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务