【刷算法】一棵树是不是是另一棵树的子构造

问题形貌

输入两棵二叉树A,B,推断B是不是是A的子构造。(ps:我们商定空树不是恣意一个树的子构造)

剖析

假定树A的根节点ra和树B的根节点rb值雷同,那末接下来就以这两个节点最先顺次比较ra.left和rb.left、ra.right和rb.right,过程当中只需有一个不雷同则返回;继承比较ra.left和rb是不是雷同、ra.right和rb是不是雷同,就这样顺次举行下去,时候复杂度则为O(树A的节点数)*O(树B的节点数)

代码完成

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function HasSubtree(r1, r2)
{    
    if(r1 === null || r2 === null)
        return false;
    return check(r1, r2) || HasSubtree(r1.left, r2) || HasSubtree(r1.right, r2);
}
function check(a,b){
    if(b === null)
        return true;
    if(a === null || a.val !== b.val)
        return false;
    return check(a.left, b.left) && check(a.right, b.right);
}
    原文作者:亚古
    原文地址: https://segmentfault.com/a/1190000015767287
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞