首先我们先来区别什么是子树和子结构
二叉树:
子树:
子结构(子树也是结构的一部分,但子结构的定义更加宽泛):
思路分析:
首先传入两个树: 树1 ,树2,
树1 ,树2都不能为空,因为空子树不是子结构,空子树也不可能包含子结构,如果一个为空就return false
然后,我们对比根节点的值是否相同
如果相同,我们再分别判断左子树和右子树是否相同
如果不同则return false
如果 树1=null ,则说明树2有比树1多的部分,return false
如果 树2=null,则说明树2已有部分和树1可以完全匹配 return ture
代码如下:
function jude(node , no) {
if (no == null) {
return true;
}
if (node == null) {
return false;
}
if (node.val == no.val) {
return jude(node.left, no.left) && jude(node.right, no.right);
} else {
return false;
}
}
function HasSubtree(root1, root2)
{
if (root1 == null || root2 == null) {
return false;
}
return jude(root1, root2) || HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
}