输入两棵二叉树A,B,判断B是否是A的子结构。(ps:咱们约定空树不是任意一个树的子结构)bash
假设树A的根节点ra和树B的根节点rb值相同,那么接下来就以这两个节点开始依次比较ra.left和rb.left、ra.right和rb.right,过程当中只要有一个不相同则返回;继续比较ra.left和rb是否相同、ra.right和rb是否相同,就这样依次进行下去,时间复杂度则为O(树A的节点数)*O(树B的节点数)ui
/* 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);
}
复制代码