剑指offer-17:树的子结构

树的子结构

https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?tpId=13&&tqId=11170&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:
1:判断是否为子结构,我的想法是要构造一个比较函数,比较当前传入的两个树.
2:比较函数:比较传入的树是否为空、比较传入的节点值是否相等,然后递归迭代子节点.
3:由于比较函数只比较当前传入的两个子树是否相等,所以在主函数中也要进行递归.
4:主函数中需要设置停止递归的条件:两个子树有一个为空就停止输出false.
5:需要给每一个子树都调用一次并且进行或运算,所以调用compare函数,并且递归调用主函数的左右子树.

//比较函数
function compare(p1,p2){
    if(!p2) return true
    if(!p1) return false
    if(p1.val !== p2.val) return false
    return compare(p1.left,p2.left) && compare(p1.right,p2.right)
}
//主函数
function HasSubtree(pRoot1, pRoot2)
{
    // write code here
    if(!pRoot1 || !pRoot2) return false
    return compare(pRoot1, pRoot2) || HasSubtree(pRoot1.left, pRoot2) 
    || HasSubtree(pRoot1.right, pRoot2)
}
全部评论

相关推荐

11-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳  yidao,试用期 6 个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
10-18 13:01
已编辑
西安理工大学 C++
小米内推大使:建议技能还是放上面吧,hr和技术面试官第一眼想看的应该是技能点和他们岗位是否匹配
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务