剑指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)
}
全部评论

相关推荐

牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务