问题形貌
输入两棵二叉树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);
}