题解 | #树的子结构#

树的子结构

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

没写出来照抄的 两个递归属实牛 感觉我的思路没问题啊

// /* function TreeNode(x) {
//     this.val = x;
//     this.left = null;
//     this.right = null;
// } */
// function HasSubtree(pRoot1, pRoot2)
// {
//     // write code here
//     let res
//      if(!pRoot1||!pRoot2) return false;
//      if(pRoot1.val===pRoot2.val){
//         if(!pRoot2.left){
//              res=HasSubtree(pRoot1.right,pRoot2.right)
//          }else if(pRoot2.right===null){
//              res=HasSubtree(pRoot1.left,pRoot2.left)
//              return true
//          }else{
//              res=HasSubtree(pRoot1.left,pRoot2.left)&&HasSubtree(pRoot1.right,pRoot2.right)          
//             return true
//          }
//      }else{
//        res=HasSubtree(pRoot1.left,pRoot2)||HasSubtree(pRoot1.right,pRoot2)
//        return false
//      }
// }
// module.exports = {
//     HasSubtree : HasSubtree
// };

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function HasSubtree(pRoot1, pRoot2)
{
    // 空树做特殊处理
    if(!pRoot1 || !pRoot2){
        return false
    }
    return checkSameTree(pRoot1, pRoot2) // 校验当前节点的左右子树是否相同
    || HasSubtree(pRoot1.left, pRoot2) // 如果不相同,校验pRoot1的左子树
    || HasSubtree(pRoot1.right, pRoot2) // 还不相同校验右子树
}

function checkSameTree(pRoot1, pRoot2){
    // 如果pRoot2不存在,证明pRoot2已经比较完了,且完全相同
    if(!pRoot2){
        return true
    }
    // 如果pRoot2还在,但是pRoot1没了,说明当前子树比pRoot2节点少,所以不相同
    else if(!pRoot1){
        return false
    }
    // 值不相同所以不相同
    else if(pRoot1.val !== pRoot2.val){
        return false
    }
    // 继续校验左右子节点
    return checkSameTree(pRoot1.left, pRoot2.left) && checkSameTree(pRoot1.right, pRoot2.right)
}

module.exports = {
    HasSubtree : HasSubtree
};
全部评论

相关推荐

totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
拒绝无效加班的小师弟很中意你:求职意向没有,年龄、课程冗余信息可以删掉,需要提升项目经历。排版需要修改。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务